Escapar una comilla doble ca n absolutamente necesario en sed: por ejemplo, si está utilizando comillas dobles en toda la expresión sed (como debe hacer cuando quiera usar una variable de shell).
Aquí hay un ejemplo que toca en escapar de sed, sino también recoge algunas otras cuestiones citando en bash:
# cat inventory
PURCHASED="2014-09-01"
SITE="Atlanta"
LOCATION="Room 154"
Digamos que usted quiere cambiar el ambiente usando una secuencia de comandos sed que puede utilizar una y otra vez, por lo que variablize la entrada de la siguiente manera:
# i="Room 101" (these quotes are there so the variable can contains spaces)
Este script se sumará toda la línea si no está allí, o simplemente reemplazará (usando sed) la línea que está allí con el texto más el valor de $ i.
if grep -q LOCATION inventory; then
## The sed expression is double quoted to allow for variable expansion;
## the literal quotes are both escaped with \
sed -i "/^LOCATION/c\LOCATION=\"$i\"" inventory
## Note the three layers of quotes to get echo to expand the variable
## AND insert the literal quotes
else
echo LOCATION='"'$i'"' >> inventory
fi
P.S. Escribí el guión anterior en varias líneas para que los comentarios apta para su procesamiento, pero lo uso como una sola línea en la línea de comandos que se parece a esto:
i="your location"; if grep -q LOCATION inventory; then sed -i "/^LOCATION/c\LOCATION=\"$i\"" inventory; else echo LOCATION='"'$i'"' >> inventory; fi
excelente respuesta, solo tengo una pregunta rápida. ¿Cómo puedo hacer comillas simples en lugar de mis dobles? Tengo instancias en mi código donde es simple o doble. Solo puedo ejecutar este comando dos veces, pero ¿cuál es la sintaxis para escanear una sola cita? – KRB
Simplemente cambie las comillas para que tenga, por ejemplo, 'sed 's #' http: //www.fubar.com'#URL_FUBAR#g" 'o escape las comillas simples' sed 's # \' http: //www.fubar.com \ '# URL_FUBAR # g''. – Kusalananda
un genio en ciernes - muchas gracias :) – danday74