Escapando aspas simples ** com ** um alias [duplicado]

0

Estou ciente de que há muitas perguntas feitas no passado sobre como escapar de citações simples, mas nenhuma delas aborda esse desafio, por exemplo, como fazer com um alias .

Já defini com sucesso muitos aliases para substituir os comandos sed / awk / grep / perl que usam regex na última versão do bash (4.4.0 (1)).

Por exemplo, o seguinte alias pode escapar de aspas duplas em qualquer string:

alias esc_double_quotes=$'sed \'s|"|\\"|g\''
string="JC's alias to escape \"double quotes\""
echo "$string" | esc_double_quotes
JC's alias to escape \"double quotes\"

No entanto, quando se trata de escapar de aspas simples com um alias, parece que a missão é impossível .

Já experimentei 5 métodos diferentes , todos falhando por diferentes motivos:

# 1) My first technique
alias esc_single_quotes=$'sed \"s|'|\\'|g\"'
# 2) My second technique
alias esc_single_quotes="sed 's|'\''|\\'\''|g'"
# 3) My third technique
alias esc_single_quotes="sed \"s|'|\\'|g\""
# 4) Technique inspired from http://stackoverflow.com/questions/1250079/how-to-escape-single-quotes-within-single-quoted-strings?answertab=active#tab-top
alias esc_single_quotes='sed '"'"'s|'|\\'|g'"'"
# 5) Technique inspired from http://stackoverflow.com/posts/1315213/revisions
alias esc_single_quotes='sed '\''s|'|\\'|g'\'''

Alguém faria jus a este desafio impossível & provar que estou errado?

    
por jean-christophe Manciot 13.02.2017 / 15:38

3 respostas

1

Eu posso escapar de tudo de uma vez com

printf "%q\n" "$string"

Mas aqui está sua resposta:

alias esc_single_quotes="sed \"s/'/\\\\'/g\""
echo  "$string" | esc_single_quotes 
JC\'s alias to escape "double quotes"

ou:

alias esc_single_quotes='sed "s/'\''/\\'\''/g"'
echo  "$string" | esc_single_quotes 
JC\'s alias to escape "double quotes"
    
por 13.02.2017 / 16:20
1

Para ajudar nossos olhos, simplifiquemos:

$ alias esc_single_quotes='sed "s|\x27|\x5c\x5c\x27|g"'

$ echo "this is 'something'"
this is 'something'

$ echo "this is 'something'" |esc_single_quotes
this is \'something\'
    
por 13.02.2017 / 17:00
0
#!/usr/bin/env bash

function esc_double_quotes() {
    echo $* | sed 's|"|\\"|g'
}
    
por 13.02.2017 / 15:57

Tags