sed - 跨多个文件删除某些字符串的部分

时间:2015-04-25 03:18:18

标签: regex linux bash replace sed

在教程here中,我学会了从Linux命令行中查找和替换多个文件中的文本。例如,

find . -name "*.php" -print | xargs sed -i 's/foo/bar/g'

在以'.php'结尾的文件中查找'foo'的所有实例,并用'bar'替换此类实例。

现在假设我有assert something.makeAssertion这样的多个冗余事件,我想用something.makeAssertion替换。鉴于something可能会有所不同,我该如何调整脚本呢?我尝试使用$来捕获something作为变量(?),但还没弄明白。

1 个答案:

答案 0 :(得分:1)

表面上,您可以使用:

find . -name '*.php' -exec \
    sed -i.bak -e 's/assert\(.*\.makeAssertion\)/\1/g' {} +

当线路上有assert时,正则表达式会删除.makeAssertionfind … -exec在找到的文件上运行sed+表示'将一个方便数量的文件分组到一个命令行',而不像xargs但没有一些复杂性。使用GNU findxargs的替代方案是:

find . -name '*.php' -print0 |
    xargs -0 sed -i.bak -e 's/assert\(.*\.makeAssertion\)/\1/g'

这两个都避免了文件名中的空格或换行符的问题。