【问题标题】:Multiple find-and-replaces, recursively多个查找和替换,递归
【发布时间】:2013-05-26 18:36:15
【问题描述】:

我正在寻找一种有效的方法来跨多个文件执行大量(比如 100 个)查找和替换操作。通过查找和替换,我的意思是一个简单的替换(例如在 sed 或 vim 语法中,这将 s/cow/pig AND s/fish/bird AND s/cat/dog ...所有这些,对于所有匹配的文件)。

也许 sed 是最好的选择,但我想保留它的开放性,因为我怀疑可能有更有效的解决方案。

【问题讨论】:

    标签: bash text replace substitution


    【解决方案1】:

    这个问题有点模糊,有很多方法可以做到。对于多个文件的多次替换,您可以在循环中使用sed

    以下方法需要两组文件。包含需要替换的单词的文件和包含它们的替换的文件。

    您可以读取文件并执行sed 操作。像这样的:

    while read -r substitute && read -r replacement <&3; do
      sed -i "s/ "$substitute" / "$replacement" /g" *.txt
    done <substitute.text 3<replacement.text
    

    注意*.txt 那是glob 传递多个文件。此外,还有-i 选项传递给sed,它执行文件内替换。如果您正在玩弄不同的方法,我不会推荐它。您可以使用-i"bak"对原始文件进行备份。

    就像我之前说的,这只是一个让事情顺利进行的建议。

    【讨论】:

    • 谢谢。如果问题含糊不清,那是因为我正在寻找最有效的解决方案,因为它可以带来数量级的改进,即几小时到几分钟。
    • @mahemoff 当然,我同意。 :)
    猜你喜欢
    • 2012-04-28
    • 2011-10-23
    • 2023-03-25
    • 2016-08-21
    • 2015-06-10
    • 2012-12-26
    • 2018-06-25
    • 2020-03-22
    • 1970-01-01
    相关资源
    最近更新 更多