3

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

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

问候。

4

5 回答 5

6

寻找 。-类型 f | xargs sed -is/模式/替换/g

于 2008-09-23T22:50:49.050 回答
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

希望这可以帮助。

于 2008-09-23T22:49:13.500 回答
2

听起来您会从间接层中受益。(但是,谁不会呢?)

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

于 2008-09-23T22:48:35.060 回答
1

不要在工作的 SVN/CVS 目录中尝试上述操作,因为它还会修补 .svn/.cvs,这绝对不是您想要的。例如,要避免 .svn 修改,请使用:

find . -type f | fgrep -v .svn | xargs sed -i 's/pattern/replacement/g'
于 2009-09-17T15:39:42.083 回答
0

使用zsh高级 globing,您只能使用一个命令。例如:

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

高温高压

于 2008-09-25T09:03:15.480 回答