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

问题描述 投票:0回答:2

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

 #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:无法编辑构建:不是常规文件

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

regex linux sed terminal
2个回答
17
投票

看起来

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

find . -type f -exec sed -i 's/from/to/' {} \;

这使用

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


0
投票

我认为 sed 缺少结束命令的“/g”部分。 这对我有用

find . -type f -name '*.py' -exec sed -i 's/from/to/g' {} \; -ls

用模式限制搜索并显示正在考虑哪些文件。

© www.soinside.com 2019 - 2024. All rights reserved.