Unix命令以递归方式搜索和替换文本

时间:2014-01-03 12:44:20

标签: bash shell unix recursion sed

我正在寻找一个UNIX命令,帮助我以递归方式从文件夹中的所有文件中搜索文本,并用新值替换它。在互联网上搜索后,我遇到了这个对我有用的命令。

  

找到./myFolder -type f -print0 | xargs -0 sed -i's / Application / whatever / g'

请帮助我理解上述命令。我无法理解命令的这一部分:-print0 | xargs -0,这表明了什么?我只知道Unix中的基础知识,因此很难理解这一点。我正在使用bash shell。

还有任何替代命令在Unix中提供相同的功能,从谷歌搜索我得到与Perl脚本相关的命令,我不知道Perl因此放弃了使用它的想法。< / p>

2 个答案:

答案 0 :(得分:12)

  

Also are there any alternate commands that provides same functionality in Unix

是的,你可以自己找到这一切:

find ./myFolder -type f -exec sed -i 's/Application/whatever/g' '{}' \;
-exec中的

find选项适用于:

  

-exec utility [argument ...] ;
               如果名为utility的程序返回零值作为其退出状态,则为True。可选参数可以传递给实用程序。   表达必须是                以分号('';'')结束。如果你从shell调用find,你可能需要引用分号,如果shell会   否则将其视为一个                控制操作员。如果字符串''{}''出现在实用程序名称中的任何位置,或者参数被替换为路径名   当前文件。                将从执行查找的目录执行实用程序。效用和参数不受制于   进一步扩大壳                模式和结构。

答案 1 :(得分:1)

find正在传递给定路径中的所有文件 -type f有限的文件(没有文件夹,......) -print0使用相应的文件

将输出提供给stdout

所以这会从一个起点和

中的所有子文件夹中提供所有文件

xargs允许您将参数传递给来自上一个命令的下一个命令(所以文件名在这里)

sed -i编辑输入(这里是传递的文件) 's/Application/whatever/g' sed命令将“应用程序”模式替换为“任何”,任何事件(g