2008-09-23 114 views

回答

5

试试这个

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 

希望这有助于。

+0

请注意,旧文件将保存为* .bak,它间接满足要求:“打印出修改过的文件”。 – 2008-09-23 23:04:00

2

这听起来像你会从间接层获益。 (但那么,谁不会呢?)

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

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

另一种方法:

6

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

+0

额外的注意:你必须在模式中用反斜杠来引号:... sed -i s/\“hello \”/ hi/g – nickf 2009-01-05 02:35:09

0

使用zsh所以对于高级globing,只能使用一个命令。 例如: -

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

HTH

1

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

相关问题