多次查找和替换,递归

时间:2013-05-31 02:19:12

标签: bash text replace substitution

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

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

1 个答案:

答案 0 :(得分:0)

问题有点模糊,有很多方法可以做到。对于跨多个文件的多次替换,您可以在循环中使用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的{​​{1}}选项进行文件内替换。如果你用不同的方法玩弄,我不会推荐它。您可以使用sed备份原始文件。

正如我之前所说,这只是一个让球滚动的建议。