如何在终端中用更多文件中的另一个字符串替换字符串?

时间:2015-07-17 12:45:18

标签: linux replace sed terminal grep

假设有一个名为“my-folder”的文件夹,其中包含100个文件。如果我们要在所有100个文件中替换(不是在文件名中,而是在实际文件中)字符串“originalString”和“replacementString”,那么命令应该做什么工作?

尝试:
grep -rl matchstring ~/my-folder | xargs sed -i 's/originalString/replacedString/g'

find ~/my-folder -type f -exec sed -i 's/originalString/replacedString/g' {} \;

我还在stackoverflow上阅读了this

这些都不适合我。我拼写错了?顺便说一下,我在linux上。

1 个答案:

答案 0 :(得分:5)

我会用这个:

find my_folder -type f -exec sed 's/old_string/new_string/g' {} +

一旦您确认它正常工作,请将-i选项传递给sed,使其可以编辑原始文件。

这非常接近你的第二个解决方案,但是我使用+而不是\;作为find的exec选项的结束分隔符。这类似于xargs - 命令行是通过附加每个选定的文件名来构建的。最后,命令的调用总数将远远少于匹配文件的数量。