BASH:递归程序替换文件树中的文本
问题描述:
我在Bash是全新的,但我似乎无法找到一种方法让它按照我想要的方式工作。BASH:递归程序替换文件树中的文本
假设你有一个树形目录有2个文件: /top.php和/test/bottom.php
如何让我的函数查找和替换说“你好”到“卓悦”在/顶.php AND在/test/bottom.php?
到目前为止,我发现做到这一点的唯一方法是通过用不同深度级别调用同一个函数两次:
find ./*.php -type f -exec sed -i 's/hello/bonjour/' {} \;
find ./*/*.php -type f -exec sed -i 's/hello/bonjour/' {} \;
肯定有一个递归的方式在一行做到这一点?
答
使用xargs的和grep:
find . -type f | grep php$ | xargs -n1 -i sed -i 's/hello/bonjour/' {}
下面是它如何工作的:
找到所有文件和 - 当前目录:
find . -type f
只包括那些在php结尾的文件:
grep php$
每次取线,并应用SED它:
xargs -n1 -i sed -i 's/hello/bonjour/' {}
可能[awk/sed的重复:如何做一个recursi找到/替换一个字符串?](http://stackoverflow.com/questions/1583219/awk-sed-how-to-do-a-recursive-find-replace-of-a-string) – Pureferret