使用带双引号的 sed

Zum*_*rio 2 sed string

回答这个问题

我在sed4.2.2 版本中发现了以下情况。

从这个输入:

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

我只想从第二行中删除字符串“主机名”,因此预期的输出是:

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

然后我使用了以下命令:

sed -e 's/" host-name,"//g' input_file
Run Code Online (Sandbox Code Playgroud)

但是,它不会删除 input_file 上的“主机名”字符串,使其保持原样。

如果我不使用双引号:

sed -e 's/ host-name,//g' input_file
Run Code Online (Sandbox Code Playgroud)

它正确地给出了预期的输出。

我认为正确的方法是使用双引号,但无法弄清楚为什么它在这里不起作用。

Ale*_*exP 6

字符"不是特殊的外壳里面'... '。事实上,里面'……' 没有一个字符是特殊的shell;因此,"字符被传递给sed; 而且它们对sed.

该命令sed -e 's/" host-name,"//g'从字面上寻找"   h o s t n a m e , ",它不会找到,因为它不存在。