使用 sed 替换目录中所有文件中的字符串

ali*_*569 1 regex linux terminal sed

我正在尝试查找并替换所有出现的这种情况:

 #include <boost
Run Code Online (Sandbox Code Playgroud)

有了这个:

#include </home/pi/Desktop/boost_1_66_0/boost
Run Code Online (Sandbox Code Playgroud)

使图书馆工作。这是我想出的:

sed -i 's/#include <boost/#include <\/home\/pi\/Desktop\/boost_1_66_0\/boost/g' *
Run Code Online (Sandbox Code Playgroud)

但给了我这个:

sed:无法编辑构建:不是常规文件

我是否转义了'/' 错误还是# 问题?

Tur*_*urn 5

它看起来像build一个目录,你不能sed在一个目录上运行。一种选择,如果您的目录树只有一层,则使用最后一个参数*/*而不是*. 对于任意深度的目录结构,更有效的方法是使用find查找所有文件并sed在其上运行:

find . -type f -exec sed -i 's/from/to/' {} \;
Run Code Online (Sandbox Code Playgroud)

这用于find从当前目录开始并递归下降目录树。对于-type f它找到的每个常规文件 ( ),它将运行提供给-exec选项的命令。它用{}它找到的文件替换。

  • 考虑使用“{}+”,这样就不会为每个文件调用“sed”。 (5认同)