2

我有一堆文件(同名,比如 abc.txt)散布在网络文件系统中。

我需要递归搜索每个文件,一旦找到每个文件,就进行内容搜索并替换它们。

经过一番研究,我发现我可以使用 find 命令找到文件(使用 -r 进行递归,对吗?)。就像是:

    find . -r -type f  abc.txt

并使用 sed 对每一个进行查找和替换:

    sed -ie 's/search/replace/g' abc.txt

但我不确定如何将两者粘合在一起,以便找到所有出现的 abc.txt,然后对每一个进行搜索/替换。

我的目录树非常大,所以我知道递归搜索所有目录需要很长时间,但这比手动尝试查找每个文件要好。

我在带有 Bash 的 OSX 10.6 上。

谢谢大家!

更新:我认为下面发布的答案可能适用于其他操作系统(也许是 linux),但对于 OSX,我不得不稍微调整一下。

    find . -name abc.text -exec sed -i '' 's/search/replace/g' {} +

在 sed 中的 -i 之后似乎需要空引号,以表明我们不想生成备份文件。手册页内容如下:

-i 扩展名:

就地编辑文件,以指定的扩展名保存备份。如果给出零长度扩展名,则不会保存备份。

4

1 回答 1

6
find . -r -type f abc.txt -exec sed -i -e 's/search/replace/g' {} +
于 2012-05-09T19:20:14.490 回答