Bash:替换文本文件中的字符串的任何命令?

Eli*_*ria 3 bash shell text-processing replace

我有一个包含许多文本文件的目录层次结构.我希望每次在其中一个文件中出现时搜索特定的文本字符串,并将其替换为另一个字符串.例如,我可能想要用"Pepsi"替换字符串"Coke"的每个匹配项.有谁知道如何做到这一点?我想知道是否有某种Bash命令可以做到这一点,而无需在编辑器中加载所有这些文件,或者想出一个更复杂的脚本来完成它.

我发现这个页面使用sed解释了一个技巧,但它似乎不适用于子目录中的文件.

Yan*_*min 15

使用sed与组合find.例如:

find . -name "*.txt" | xargs sed -i s/Coke/Pepsi/g
Run Code Online (Sandbox Code Playgroud)

要么

find . -name "*.txt" -exec sed -i s/Coke/Pepsi/g {} \;
Run Code Online (Sandbox Code Playgroud)

(有关更多信息,请参阅查找手册页)

  • 另外,如果你使用`find`和`xargs`的组合,特别是在脚本中,最好使用`find -print0`和`xargs -0`来防止名字中带有空格的文件 (6认同)