我有这个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
会抱怨“没有输入文件”。当文件列表为空时,如何使此管道成功?
如果你想避免在sed
没有输出时运行grep
,那么(因为你用Ubuntu标记了这个),你可以给-r
提供--no-run-if-empty
或xargs
参数:
--no-运行,如果空 -r 如果标准输入不包含任何非空白,请不要运行该命令。通常,即使没有输入,命令也会运行一次。此选项是GNU扩展。
所以你的命令应该是这样的:
grep -rl "$old" /etc | xargs -r sed -i "s/$old/$new/g"