我正在尝试查找并替换所有出现的情况:
#include <boost
这样:
#include </home/pi/Desktop/boost_1_66_0/boost
让图书馆发挥作用。这是我想到的:
sed -i 's/#include <boost/#include <\/home\/pi\/Desktop\/boost_1_66_0\/boost/g' *
但是给了我这个:
sed:无法编辑构建:不是常规文件
我是否转义了 '/' 错误,还是 # 出了问题?
看起来
build
是一个目录,并且您无法在目录上运行 sed
。如果您的目录树只有一层,一种选择是使用最后一个参数 */*
而不是 *
。对于任意深度的目录结构,更有效的方法是使用 find
查找所有文件并对其运行 sed
:
find . -type f -exec sed -i 's/from/to/' {} \;
这使用
find
从当前目录开始,并在目录树中递归下降。对于它找到的每个常规文件 (-type f
),它将运行为 -exec
选项指定的命令。它用找到的文件替换 {}
。
我认为 sed 缺少结束命令的“/g”部分。 这对我有用
find . -type f -name '*.py' -exec sed -i 's/from/to/g' {} \; -ls
用模式限制搜索并显示正在考虑哪些文件。