Bash 对多个文件类型使用'find',并替换找到的文件中的字符串

Bash 对多个文件类型使用'find',并替换找到的文件中的字符串,bash,recursion,sed,find,Bash,Recursion,Sed,Find,我试图递归地查找多种类型的文件,并替换找到的每个文件中的某个字符串。但是当我运行脚本时,它只会找到一种类型的文件 我使用的命令行是 find . -name '*.tcl' -o -name '*.itcl' -o -name '*.db' -exec sed -i 's/abc/cba/g' {} + 每次我运行上面的命令时,它只查找.db类型的文件。当我使用单个文件类型运行它时,它工作正常。您需要将-names*部分与()分组,如下所示: 此外,(根据我的经验)最好只在符合模式的文件上运行

我试图递归地查找多种类型的文件,并替换找到的每个文件中的某个字符串。但是当我运行脚本时,它只会找到一种类型的文件

我使用的命令行是

find . -name '*.tcl' -o -name '*.itcl' -o -name '*.db' -exec sed -i 's/abc/cba/g' {} +

每次我运行上面的命令时,它只查找
.db
类型的文件。当我使用单个文件类型运行它时,它工作正常。

您需要将
-names*
部分与
()
分组,如下所示:

此外,(根据我的经验)最好只在符合模式的文件上运行
sed-i
,因此:

find . \( -name '*.tcl' -o -name '*.itcl' -o -name '*.db' \) -exec sed -i '/abc/s/abc/cba/g' {} +

下面的命令将搜索txt或日志文件,并用目标字符串替换源字符串

 find . -name "*.txt" -o -name "*.log"|xargs perl -pe 's/source/target/g'
您可以通过在perl语句中添加-i来进行替换,如下所示:

find . -name "*.txt" -o -name "*.log"|xargs perl -pi -e 's/source/target/g'
你可以做:

find . -regex ".*\.\(tcl\|itcl\|db\)" -exec sed -i 's/abc/cba/g' {} +

这更紧凑,您不必处理或分组逻辑操作。

我如何告诉它不要在特定文件夹中查看?例如:
-路径“*/folder/*”