如何避免来自sed的"无输入文件"错误?

ubu*_*ntu 7 ubuntu sed xargs

我有这个shell脚本来更新配置文件中的IP地址(任何匹配$old_address_pattern必须更改为$new_address):

grep -rl "$old_address_pattern" /etc \
  | xargs sed -i "s/$old_address_pattern/$new_address/g"
Run Code Online (Sandbox Code Playgroud)

如果grep命令找不到匹配的文件,那么sed将抱怨"没有输入文件".当文件列表为空时,如何使此管道成功?

Tob*_*ght 10

如果你想避免在grep没有输出时运行sed,那么(因为你用Ubuntu标记了它),你可以给xargs 提供sedgrep参数:

--no-run-if-empty
-r
如果标准输入不包含任何非空白,请不要运行该命令.通常,即使没有输入,命令也会运行一次.此选项是GNU扩展.

所以你的命令应该是这样的:

grep -rl "$old" /etc | xargs -r sed -i "s/$old/$new/g"
Run Code Online (Sandbox Code Playgroud)