针对与目录模式匹配的文件的递归 sed



有没有一种简单的方法可以使用sed来替换与目录模式匹配的文件中的文本?例如,如果我有一个名为 somedir/example.txt 的文件,其中包含以下文本:

福巴

我可以运行以下内容:

sed -i -e 's/foo/bar/g' somedir/example.txt

导致文件的文本为:

有没有办法指定目录模式,例如:

somedir/**/example.txt

哪个会递归更新somedir文件夹下的任何example.txt文件?如果有更简单的方法可以做到这一点,我也是游戏。

如果您有 bash 版本 4,请运行

shopt -s globstar
sed -i -e 's/foo/bar/g' somedir/**/example.txt

如果你有一个早期版本的bash或只是一个POSIX shell,那么运行:

find somedir -type f -name 'example.txt' -exec sed -i -e 's/foo/bar/g' {} +

对于 OSX:

find somedir -type f -name 'example.txt' -exec sed -i '' -e 's/foo/bar/g' {} +

文档

man bash(版本 4+):

globstar
如果设置,则路径名扩展上下文中使用的模式 ** 将匹配所有文件和零个或多个目录 和子目录。 如果模式后跟/,则仅 目录和子目录匹配。

我将接受 John 的回答,但是由于我想出了使用 perl 的方法,当他写他的答案时,我想我还是会发布:

find somedir -type f -name 'example.txt' -print0 | xargs -0 perl -i -pe 's/foo/bar/g'

相关内容

  • 没有找到相关文章

最新更新