我正在寻找一个UNIX命令,帮助我以递归方式从文件夹中的所有文件中搜索文本,并用新值替换它。在互联网上搜索后,我遇到了这个对我有用的命令。
找到./myFolder -type f -print0 | xargs -0 sed -i's / Application / whatever / g'
请帮助我理解上述命令。我无法理解命令的这一部分:-print0 | xargs -0
,这表明了什么?我只知道Unix中的基础知识,因此很难理解这一点。我正在使用bash shell。
还有任何替代命令在Unix中提供相同的功能,从谷歌搜索我得到与Perl
脚本相关的命令,我不知道Perl
因此放弃了使用它的想法。< / p>
答案 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
使用相应的文件
所以这会从一个起点和
中的所有子文件夹中提供所有文件 xargs
允许您将参数传递给来自上一个命令的下一个命令(所以文件名在这里)
sed -i
编辑输入(这里是传递的文件)
's/Application/whatever/g'
sed命令将“应用程序”模式替换为“任何”,任何事件(g
)