【问题标题】:How to replace a string with another string in more files, from terminal?如何从终端用更多文件中的另一个字符串替换一个字符串?
【发布时间】:2023-03-26 01:02:01
【问题描述】:

假设有一个名为“my-folder”的文件夹包含 100 个文件。如果我们想用“replacedString”替换所有100个文件中的字符串“originalString”(不是在文件名中,而是在实际文件中),应该用什么命令来完成这项工作?

试过了:
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 上。

【问题讨论】:

  • 两种解决方案对我来说都很好。它根本不起作用或在什么范围内起作用?
  • grep -rl matchstring ~/my-folder | xargs sed -i 's/originalString/replacedString/g' 给了我sed: no input files 并且第二个命令没有给我任何东西。难道是因为在我提供的目录中,还有其他文件所在的目录?

标签: linux replace sed terminal grep


【解决方案1】:

我会用这个:

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

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

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

【讨论】:

  • 这给了我:find: Arguments to -type should contain only one letter
  • 对不起,我忘记了f。已编辑。
  • @Christian 我现在需要参加一个会议,大约 30 分钟后回来。
  • 非常感谢!有效。 find myFolder -type f -exec sed -i 's/oldString/newString/g' {} +
  • @Cristian 欢迎您!但是,您在问题中发布的基于查找的解决方案也应该有效。可能你只是在某个地方打错了字。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-21
  • 2018-05-19
  • 2011-07-01
  • 2013-12-03
  • 2021-06-15
  • 2023-04-08
  • 2019-05-14
相关资源
最近更新 更多