Использование sed с двойными кавычками

Использование sed с двойными кавычками

Отвечая наэтот вопрос:

Я обнаружил следующую ситуацию с sedверсией 4.2.2.

Из этого ввода:

send host-name = gethostname();
    domain-name, domain-name-servers, domain-search, host-name,
#  option host-name "andare.swiftmedia.com";

Я хочу удалить строку «host-name» только из второй строки, поэтому ожидаемый вывод будет следующим:

send host-name = gethostname();
    domain-name, domain-name-servers, domain-search,
#  option host-name "andare.swiftmedia.com";

Затем я использовал следующую команду:

sed -e 's/" host-name,"//g' input_file

Однако он не удалит строку «host-name» в input_file, оставив ее как есть.

Если я не использую двойные кавычки:

sed -e 's/ host-name,//g' input_file

Он дает ожидаемый результат.

Я думал, что правильным способом будет использование двойных кавычек, но не могу понять, почему здесь это не работает.

решение1

Характер "не является особенным для оболочки внутри '... '. На самом деле, внутри '...' ни один персонаж не является особеннымдля оболочки; как следствие, "символы передаются в sed; и они не являются специальными для sed.

Команда sed -e 's/" host-name,"//g'ищет буквально "   h o s t n a m e , ", ​​но не находит, потому что его там нет.

Связанный контент