Sfuggire a una doppia quota ca n essere assolutamente necessario in sed: ad esempio, se si utilizzano le virgolette doppie nell'intera espressione sed (come è necessario fare quando si desidera utilizzare una variabile di shell).
Ecco un esempio che tocca fuggire in sed, ma coglie anche alcune altre questioni che citano in bash:
# cat inventory
PURCHASED="2014-09-01"
SITE="Atlanta"
LOCATION="Room 154"
Diciamo che si voleva cambiare la stanza utilizzando uno script sed che è possibile utilizzare più e più volte, in modo da variablize l'ingresso nel modo seguente:
# i="Room 101" (these quotes are there so the variable can contains spaces)
Questo script aggiungerà l'intera linea, se non c'è, o sarà semplicemente sostituire (utilizzando sed) la linea che è lì con il testo più il valore del $ 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. Ho scritto la sceneggiatura di cui sopra su più righe per rendere i commenti che analizzabile, ma lo uso come una battuta sulla riga di comando simile alla seguente:
i="your location"; if grep -q LOCATION inventory; then sed -i "/^LOCATION/c\LOCATION=\"$i\"" inventory; else echo LOCATION='"'$i'"' >> inventory; fi
fonte
2016-06-15 20:54:36
ottima risposta dood, ho solo una breve domanda. Come potrei fare le virgolette singole al posto dei miei doppi. Ho delle istanze nel mio codice in cui è singolo o doppio. Posso solo eseguire questo comando due volte ma qual è la sintassi per l'escape di una singola citazione? – KRB
O cambiate semplicemente le virgolette in modo da avere, ad esempio, "sed" s # "http: //www.fubar.com'#URL_FUBAR#g" 'o sfuggire alle virgolette singole' sed 's # \' http: //www.fubar.com \ '# URL_FUBAR # g''. – Kusalananda
un genio in divenire - molte grazie :) – danday74