2012-07-03 12 views
5

Quiero reemplazar todas las comillas simples en una cadena con dos comillas simples usando sed. Pero cuando la cadena contiene & el comando sed no reemplaza las comillas simples que vienen después de eso. por favor comparte algunas ideas sobre esto.Cómo escapar y al usar sed

Respuesta

13

No es necesario para escapar nada en la entrada:

$ echo "123 ' foo & b'ar" | sed "s/'/''/g" 
123 '' foo & b''ar 

Sin embargo, en la parte 'sustitución' del comando s& tiene un significado especial: significa 'match'. Es por eso que el comando anterior se puede volver a escribir como:

$ echo "123 ' foo & b'ar" | sed "s/'/&&/g" 
123 '' foo & b''ar 

escapar de ella con una \ como todo lo demás que necesita ser escapado, si es necesario:

$ echo "123 ' foo & b'ar" | sed "s/'/'\&'/g" 
123 '&' foo & b'&'ar 
5

Es más fácil de responder si publicas tu código, pero supongo que no estás escapando al ampersand. Cambia & a \& si quieres un ampersand literal.

Consulte la sección 3.1.2 de The sed FAQ para una explicación más detallada, si tiene curiosidad.

+1

Hey, quiero reemplazar una cadena con '' Y en mi cadena de salida. He intentado '" & "', '\ &', '\\ &', '\\\ &', '" '\ &' "' en función de diferentes respuestas en la web pero nada funciona, ¿alguna sugerencia? – Ava

+1

'\ &' funciona para mí. Por ejemplo, puedo reemplazar todas las instancias de 'amp' con' & 'usando' sed's/amp/\ y/g "'. Si todavía tiene problemas, debe publicar una nueva pregunta con su cadena de entrada y su código. –

+1

Sí lo hace. Estaba usando otro archivo que no tenía el cambio :( – Ava

0

Está funcionando para mí

bash>echo "'This is a string with 'single quote' & '&'" | sed "s/'/''/g" 
''This is a string with ''single quote'' & ''&'' 
Cuestiones relacionadas