Отвечая наэтот вопрос:
Я обнаружил следующую ситуацию с 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
,
"
, но не находит, потому что его там нет.