![使用带双引号的 sed](https://linux22.com/image/122617/%E4%BD%BF%E7%94%A8%E5%B8%A6%E5%8F%8C%E5%BC%95%E5%8F%B7%E7%9A%84%20sed.png)
正在回答这个问题:
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
但是,它不会删除 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
,
"
,但它找不到,因为它不在那里。