在目录及其子目录中搜索和替换单词[重复]

Posted

技术标签:

【中文标题】在目录及其子目录中搜索和替换单词[重复]【英文标题】:Search and replace a word in directory and its subdirectories [duplicate] 【发布时间】:2018-05-22 19:37:54 【问题描述】:

我需要在一个目录及其子目录的所有文件中查找并替换一个单词。

我用了这行代码:

perl -pi -w -e 's/foo/bar/g;' *.*

但它只改变当前目录下文件中的文字,不影响子目录。

如何更改每个目录和子目录的单词?

【问题讨论】:

【参考方案1】:

您可以做一个纯粹的 Perl 解决方案,递归遍历您的目录结构,但这需要编写更多代码。

更简单的解决方案是使用find 命令,它可以被告知查找所有文件并针对它们运行命令。

find . -type f -exec perl -pi -w -e 's/foo/bar/g;' \\ \;

(我已经避开了 和 ; 以防万一,但你可能不需要这个)

【讨论】:

我的朋友成功了。非常感谢!我现在正在等待将其标记为正确答案。谢谢【参考方案2】:

试试看:

find -type f | xargs -r -I  perl -pi -w -e 's/foo/bar/g;' 

这应该递归运行

如果您的文件名包含空格:

find -type f -print0 | xargs -r0 -I  perl -pi -w -e 's/foo/bar/g;' 

【讨论】:

不需要使用 xargs 除非-exec 没有提供您想要的功能,例如:并行...参见unix.stackexchange.com/questions/24954/when-is-xargs-needed 和unix.stackexchange.com/questions/321697/…

以上是关于在目录及其子目录中搜索和替换单词[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在目录中的所有 csvs 文件中进行 python 关键字搜索和单词计数器并写入单个 csv? [关闭]

用Python在给定目录及其子目录中递归替换文件中的字符串?

在 Cocoa 中搜索目录及其子目录中的所有目录/文件

在所有子目录中的文件中查找和替换文本[重复]

在整个目录树中搜索和替换

在子目录中搜索并替换regexp