如果我们以 开头 Sed 命令sed
并以 为范围sed /X/Y/ FILE
,为什么它们通常被用引号标记为sed "s/X/Y/g" FILE
?
答案1
保护它们免受壳的伤害。并不是说像这样的字符串s/X/Y/
需要它,但是当您执行涉及空格或 shell 特殊字符的操作时,无论如何您都需要添加引号。在某种程度上,从一开始就引用更容易,因为无论如何它都没有坏处。
这在没有引号的情况下有效:
$ echo abcdefg | sed s/abc/xyz/
xyzdefg
如果没有它们,这会以一些有趣的方式发生:
$ printf 'abc\nabc\n' | sed -E '$s/(abc|def)/xyz zyx/'
abc
xyz zyx