在目录和子目录中查找并替换为 sed

新手上路,请多包涵

我运行此命令以在我的站点根目录中的所有文件中查找所有出现的“apple”并将其替换为“orange”:

 find ./ -exec sed -i 's/apple/orange/g' {} \;

但它不通过子目录。

这个命令有什么问题?

以下是 find ./ 的一些输出行:

 ./index.php
./header.php
./fpd
./fpd/font
./fpd/font/desktop.ini
./fpd/font/courier.php
./fpd/font/symbol.php

原文由 hd. 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 476
2 个回答

您的 find 应该看起来像这样,以避免将目录名称发送到 sed

 find ./ -type f -exec sed -i -e 's/apple/orange/g' {} \;

原文由 jfg956 发布,翻译遵循 CC BY-SA 4.0 许可协议

对于较大的 s&r 任务,使用 grep 和 xargs 会更好更快,例如;

 grep -rl 'apples' /dir_to_search_under | xargs sed -i 's/apples/oranges/g'

原文由 Julius 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题