从xargs运行时,如何避免来自sed的“无输入文件”错误?

问题描述 投票:4回答:1

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

grep -rl "$old_address_pattern" /etc \
  | xargs sed -i "s/$old_address_pattern/$new_address/g"

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

ubuntu sed xargs
1个回答
10
投票

如果你想避免在sed没有输出时运行grep,那么(因为你用Ubuntu标记了这个),你可以给-r提供--no-run-if-emptyxargs参数:

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

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

grep -rl "$old" /etc | xargs -r sed -i "s/$old/$new/g"
© www.soinside.com 2019 - 2024. All rights reserved.