回答这个问题:
sed
我在4.2.2 版本中发现了以下情况。
从这个输入:
send host-name = gethostname();
domain-name, domain-name-servers, domain-search, host-name,
# option host-name "andare.swiftmedia.com";
我只想从第二行中删除字符串“主机名”,所以预期的输出是:
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
但是,它不会删除 input_file 上的“主机名”字符串,使其保持原样。
如果我不使用双引号:
sed -e 's/ host-name,//g' input_file
它正确地给出了预期的输出。
我认为正确的方法是使用双引号,但无法弄清楚为什么它在这里不起作用。
该字符
"
对于里面的外壳来说不是特殊的'
...'
。事实上, inside'
...'
没有字符是shell 的特殊字符;结果,"
字符被传递给sed
; 而且他们并不特别sed
。该命令
sed -e 's/" host-name,"//g'
在字面上寻找"
h
o
s
t
n
a
m
e
,
"
,它不会找到,因为它不存在。