在目录及其子目录中搜索和替换单词[重复]
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? [关闭]