Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos Bash脚本根据文件名查找文件并对其进行搜索替换_Macos_Bash_Replace - Fatal编程技术网

Macos Bash脚本根据文件名查找文件并对其进行搜索替换

Macos Bash脚本根据文件名查找文件并对其进行搜索替换,macos,bash,replace,Macos,Bash,Replace,我有一堆文件(同名,比如abc.txt)散布在网络文件系统中 我需要递归地搜索这些文件中的每一个,一旦找到每一个,就进行内容搜索并替换它们 经过一些研究,我发现我可以使用find命令找到文件(使用-r递归对吗?)。比如: find . -r -type f abc.txt 并使用sed查找和替换每个: sed -ie 's/search/replace/g' abc.txt 但我不知道如何将两者粘合在一起,以便找到所有出现的abc.txt,然后对每一个进行搜索/替换 我的目

我有一堆文件(同名,比如abc.txt)散布在网络文件系统中

我需要递归地搜索这些文件中的每一个,一旦找到每一个,就进行内容搜索并替换它们

经过一些研究,我发现我可以使用find命令找到文件(使用-r递归对吗?)。比如:

    find . -r -type f  abc.txt
并使用sed查找和替换每个:

    sed -ie 's/search/replace/g' abc.txt
但我不知道如何将两者粘合在一起,以便找到所有出现的abc.txt,然后对每一个进行搜索/替换

我的目录树非常大,所以我知道递归搜索所有目录需要很长时间,但这比手动查找每个文件要好

我和Bash在OSX 10.6上

谢谢大家

更新:我认为下面发布的答案可能适用于其他操作系统(可能是linux),但对于OSX,我不得不对其进行一些调整

    find . -name abc.text -exec sed -i '' 's/search/replace/g' {} +
sed中a-i之后似乎需要空引号,以表示我们不希望生成备份文件。本手册页内容如下:

-i扩展:


就地编辑文件,以指定的扩展名保存备份。如果提供零长度扩展名,则不会保存备份。

唯一缺少的是
\
+
-exec
子句末尾。。。复制原始海报使用的
-ie
而不是
-i-e
可能会产生意想不到的效果,因为前者将
e
指定为用于备份的文件扩展名。已更新。谢谢你的评论。谢谢你的朋友!所有的一切对我来说都很清楚,除了最后一点。{}+在结尾做什么?{}是文件名的占位符,+结束命令,并指示find向命令传递尽可能多的参数,以便它运行命令的次数远少于\。
find . -r -type f abc.txt -exec sed -i -e 's/search/replace/g' {} +