Échapper à un guillemet double peut être absolument nécessaire dans sed : par exemple, si vous utilisez des guillemets doubles dans l'ensemble de l'expression sed (comme vous devez le faire lorsque vous voulez utiliser une variable shell).
Voici un exemple qui traite de l'échappement dans sed, mais aussi d'autres problèmes de citation dans bash :
# cat inventory
PURCHASED="2014-09-01"
SITE="Atlanta"
LOCATION="Room 154"
Supposons que vous souhaitiez changer la pièce à l'aide d'un sed script que vous pouvez utiliser à l'infini, vous variabilisez donc l'entrée comme suit :
# i="Room 101" (these quotes are there so the variable can contains spaces)
Ce script ajoutera la ligne entière si elle n'existe pas, ou remplacera simplement (en utilisant sed) la ligne existante par le texte plus la valeur 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. J'ai écrit le script ci-dessus sur plusieurs lignes pour que les commentaires soient analysables, mais je l'utilise comme une ligne de commande qui ressemble à ceci :
i="your location"; if grep -q LOCATION inventory; then sed -i "/^LOCATION/c\LOCATION=\"$i\"" inventory; else echo LOCATION='"'$i'"' >> inventory; fi