Исключение двойной кавычки может быть абсолютно необходимым в sed: например, если вы используете двойные кавычки во всем выражении sed (как вам нужно делать, когда вы хотите использовать переменную оболочки).
Вот пример, который касается экранирования в sed, но также фиксирует некоторые другие проблемы цитирования в bash:
# cat inventory
PURCHASED="2014-09-01"
SITE="Atlanta"
LOCATION="Room 154"
Допустим, вы хотели изменить комнату, используя скрипт sed, который вы можете использовать снова и снова, поэтому вы можете варьировать входные данные следующим образом:
# i="Room 101" (these quotes are there so the variable can contains spaces)
Этот скрипт добавит всю строку, если ее там нет, или он просто заменит (используя sed) строку, которая там есть, текстом плюс значение $ 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. Я написал сценарий выше в несколько строк, чтобы сделать комментарии разбираемыми, но я использую его как однострочник в командной строке, который выглядит следующим образом:
i="your location"; if grep -q LOCATION inventory; then sed -i "/^LOCATION/c\LOCATION=\"$i\"" inventory; else echo LOCATION='"'$i'"' >> inventory; fi