2011-11-03 39 views
27

Lo siguiente está funcionando como se esperaba. Quiero sustituir la palabra "yo" con \'Escape de comilla simple

echo "test ' this" | sed 's/'"'"'/me/g' 
test me this 

Resultado esperado:

test \' this 

¿Es posible escapar comillas dobles, así como en el mismo comando?

Respuesta

45

Su pregunta es un poco confusa ya que no hay me en la cadena original para reemplazar. Sin embargo, creo que lo tengo. Permítanme parafrasear:

que tienen un comando sed que se puede sustituir con éxito una comilla simple ' con la palabra me. Quiero uno similar que pueda reemplazarlo con la secuencia de caracteres \'.

Si ese es el caso (lo que desea es escapar comillas simples), puede utilizar:

pax$ echo "test ' this" | sed "s/'/\\\'/g" 
test \' this 

Mediante el uso de comillas dobles alrededor del comando sed, se elimina la necesidad de preocuparse por comillas simples incrustadas . Usted hacer tienen que preocuparse de escapar a continuación, puesto que el depósito va a absorber un nivel de fugas de manera que sed verá:

s/'/\'/g 

que convertirá en '\' lo deseas.

Si desea una forma de escapar tanto individuales y comillas dobles con una sola sed, es probablemente más fácil de proporcionar múltiples comandos para sed para que pueda utilizar las comillas alternativos:

pax$ echo "Single '" 'and double "' 
Single ' and double " 

pax$ echo "Single '" 'and double "' | sed -e "s/'/\\\'/g" -e 's/"/\\"/g' 
Single \' and double \" 

Si yo' Si ha entendido mal sus requisitos, algunos ejemplos pueden ayudar.

+0

Creo que se refería a un reemplazo posterior para su primera conversión. '[dod @ MBP-13 ~] echo" pruébame esto "| sed "s/me/\\\ '/" ' ' test \' this' –

+0

@Dawn, en realidad creo que tiene sentido. OP sabe cómo hacerlo para obtener 'me', ahora quieren hacerlo para obtener' \ ''(y para comillas dobles también). Actualizado para (con suerte) responder eso. – paxdiablo

+0

Gracias por mencionar que podría reemplazar las comillas simples externas por las comillas dobles, funcionó de maravilla para mí:) –

6

Es esto lo que quiso decir ?:

# cat <<! | sed 's/["'"'"']/\\&/g' 
> quote ' 
> double quotes " 
> quote ' double quotes " 
> ! 
quote \' 
double quotes \" 
quote \' double quotes \" 

O esto:

# echo "test me test"|sed 's/me/\\'"'"'/g' 
test \' test 
# echo "test me test"|sed 's/me/\\"/g' 
test \" test 

Me parece que lo mejor es siempre comilla simple sed/awk/Perl ... comandos en la línea de comandos y hacer "agujeros" para los parámetros de comillas dobles utilizados dentro de ellos.

9

Tengo algunas dudas sobre su pregunta, pero de todos modos tal vez mi solución sea útil para cualquier persona.

me permite decir delante de todos:

\\ eso es una media \ porque cuando pones dos juntos va a cancelar su significado como metacarácter. Y \ x27 como comillas simples, al menos para mí es más fácil que trabajar con solo un doble ...

Finalmente poner

echo "test me this" | sed 's/me/\\\x27/g' 

así que aquí me tienes probar ==> test \' esta

echo "test \' this" | sed 's/\\\x27/me/g' 

y aquí es todo lo contrario.

+0

Nunca lo hubiera averiguado por mi cuenta. ¡Muchas gracias! –

Cuestiones relacionadas