2011-11-09 24 views
6

Come sostituire una virgoletta singola (') con una barra rovesciata, quindi virgoletta singola (\') usando sed?Come sostituire una virgoletta singola (') con una barra rovesciata, quindi virgoletta singola (') usando sed?

sed s/\'/\\\'/ 

non funziona perché non si arriva mai a scrivere il letterale.

sed ":a;N;s/\'/\\'/g" <file1 >file2 

non funziona perché il backslash non sfuggirà più alla citazione, viene trattato come una citazione regolare.

+0

echo \' | sed "s/'/ \\\'/g" –

+1

Funziona su Mac OS - il tuo chilometraggio può variare ... –

risposta

7

basta citare il replacem ent

$ echo \' | sed s/\'/"\\\'"/ 
$ \' 

es

$ cat text1 
this is a string, it has quotes, that's its quality 
$ sed s/\'/"\\\'"/ text1 > text2 
$ cat text2 
this is a string, it has quotes, that\'s its quality 
0

come su: "s, 'BBBB', g" sed file di dove B è un back-slash ... cioè 4 backslash ...

0

utilizzare l'opzione -e.

sed -es/\ '/ \\'/g file2

2

Provare quanto segue:

sed -e s/\'/\\\\\'/g input > output 

Per dimostrare che questo funziona:

echo "Hello 'World'" | sed -e s/\'/\\\\\'/g 

L'output dovrebbe essere:

Hello \'World\' 
-1

Questo sembra funzionare:

<<<"''''" sed 's/'\''/\\&/;s/\('"'"'\)\(..\)$/\\\1\2/;'s/\'\'$/\\\\\'\'/";s/'$/\\\'/" 
\'\'\'\' 
Problemi correlati