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



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

我使用的命令行是这个

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' {} +

这更紧凑,并且不必麻烦处理OR和逻辑运算分组。

相关内容

  • 没有找到相关文章

最新更新