在教程here中,我学会了从Linux命令行中查找和替换多个文件中的文本。例如,
find . -name "*.php" -print | xargs sed -i 's/foo/bar/g'
在以'.php'结尾的文件中查找'foo'的所有实例,并用'bar'替换此类实例。
现在假设我有assert something.makeAssertion
这样的多个冗余事件,我想用something.makeAssertion
替换。鉴于something
可能会有所不同,我该如何调整脚本呢?我尝试使用$
来捕获something
作为变量(?),但还没弄明白。
答案 0 :(得分:1)
表面上,您可以使用:
find . -name '*.php' -exec \
sed -i.bak -e 's/assert\(.*\.makeAssertion\)/\1/g' {} +
当线路上有assert
时,正则表达式会删除.makeAssertion
。 find … -exec
在找到的文件上运行sed
。 +
表示'将一个方便数量的文件分组到一个命令行',而不像xargs
但没有一些复杂性。使用GNU find
和xargs
的替代方案是:
find . -name '*.php' -print0 |
xargs -0 sed -i.bak -e 's/assert\(.*\.makeAssertion\)/\1/g'
这两个都避免了文件名中的空格或换行符的问题。