【问题标题】: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;' *.*

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

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

【问题讨论】:

    标签: macos perl directory macos-sierra


    【解决方案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;' {}
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多