sed - 跨多个文件删除某些字符串的部分
sed - Remove parts of certain strings across multiple files
从教程 here 中,我学会了从 Linux 命令行查找和替换多个文件中的文本。例如,
find . -name "*.php" -print | xargs sed -i 's/foo/bar/g'
在以“.php”结尾的文件中查找 'foo' 的所有实例,并将这些实例替换为 'bar'.
现在假设我多次重复出现类似 assert something.makeAssertion
的内容,我只想用 something.makeAssertion
替换它。鉴于 something
可能会有所不同,我该如何调整脚本呢?我用 $
尝试了一些东西来捕获 something
作为变量(?),但还没有弄清楚。
从表面上看,您可以使用:
find . -name '*.php' -exec \
sed -i.bak -e 's/assert\(.*\.makeAssertion\)//g' {} +
当行后面有 .makeAssertion
时,正则表达式会删除 assert
。 find … -exec
在它找到的文件上运行 sed
。 +
表示 'group a convenient number of files into a single command line',很像 xargs
,但没有一些复杂性。使用 GNU find
和 xargs
的替代方案是:
find . -name '*.php' -print0 |
xargs -0 sed -i.bak -e 's/assert\(.*\.makeAssertion\)//g'
这两者都避免了文件名中的空格或换行符问题。
从教程 here 中,我学会了从 Linux 命令行查找和替换多个文件中的文本。例如,
find . -name "*.php" -print | xargs sed -i 's/foo/bar/g'
在以“.php”结尾的文件中查找 'foo' 的所有实例,并将这些实例替换为 'bar'.
现在假设我多次重复出现类似 assert something.makeAssertion
的内容,我只想用 something.makeAssertion
替换它。鉴于 something
可能会有所不同,我该如何调整脚本呢?我用 $
尝试了一些东西来捕获 something
作为变量(?),但还没有弄清楚。
从表面上看,您可以使用:
find . -name '*.php' -exec \
sed -i.bak -e 's/assert\(.*\.makeAssertion\)//g' {} +
当行后面有 .makeAssertion
时,正则表达式会删除 assert
。 find … -exec
在它找到的文件上运行 sed
。 +
表示 'group a convenient number of files into a single command line',很像 xargs
,但没有一些复杂性。使用 GNU find
和 xargs
的替代方案是:
find . -name '*.php' -print0 |
xargs -0 sed -i.bak -e 's/assert\(.*\.makeAssertion\)//g'
这两者都避免了文件名中的空格或换行符问题。