Shell脚本以递归方式浏览目录并替换字符串

时间:2008-09-23 22:44:44

标签: regex scripting

我需要递归搜索目录,并在找到它的所有文件中用另一个字符串(比如http://development:port/URI)替换另一个字符串(比如http://production:port/URI)。有人可以帮忙吗?

如果该脚本可以打印出它修改过的文件并将搜索/替换模式作为输入参数,那会好得多。

问候。

5 个答案:

答案 0 :(得分:6)

找到。 -type f | xargs sed -i s / pattern / replacement / g

答案 1 :(得分:5)

试试这个:

find . -type f | xargs grep -l development | xargs perl -i.bak -p -e 's(http://development)(http://production)g'

另一种反馈略多的方法:

find . -type f | while read file
do
    grep development $file && echo "modifying $file" && perl -i.bak -p -e 's(http://development)(http://prodution)g' $file
done

希望这有帮助。

答案 2 :(得分:2)

听起来你会受益于一层间接。 (但那么,谁不会?)

我想你可以在一个位置拥有特殊字符串。在运行时引用配置设置,或在构建时使用正确的字符串生成这些文件。

答案 3 :(得分:1)

不要在工作的svn / cvs目录中尝试上述内容,因为它还会修补.svn / .cvs,这绝对不是你想要的。例如,要避免.svn修改,请使用find。 -type f | fgrep -v .svn | xargs sed -i's / pattern / replacement / g'

答案 4 :(得分:0)

使用zsh使用高级全局,您只能使用一个命令。 E.g:

sed -i 's:pattern:target:g' ./**

HTH