一尘不染

使用grep和sed查找和替换字符串

linux

我正在使用以下内容以递归方式在目录中搜索特定的字符串,并将其替换为另一个:

grep -rl oldstr path | xargs sed -i 's/oldstr/newstr/g'

这样可以。唯一的问题是,如果字符串不存在,则sed失败,因为它没有任何参数。这对我来说是个问题,因为我是使用ANT自动运行的,而构建由于sed失败而失败。

如果找不到该字符串,有没有办法使它失效?

我对我可以使用的单行简单解决方案感兴趣(不一定与grepsed与此类通用unix命令一起使用)。


阅读 605

收藏
2020-06-02

共1个答案

一尘不染

您可以使用find-exec直接进入sed,而不是第一个定位oldstrgrep。它的效率可能会降低一些,但这可能并不重要。这样,sed替换将在列出的所有文件上执行find,但如果oldstr不在该文件上,则显然无法对其进行操作。

find /path -type f -exec sed -i 's/oldstr/newstr/g' {} \;
2020-06-02