我需要遞歸搜索目錄,並在所有找到的文件中替換字符串(例如http://development:port/URI)與另一個(比如http://production:port/URI)。誰能幫忙?shell腳本遞歸瀏覽一個目錄並替換一個字符串
如果該腳本可以打印出修改過的文件並將搜索/替換模式作爲輸入參數,那將會好得多。
問候。
我需要遞歸搜索目錄,並在所有找到的文件中替換字符串(例如http://development:port/URI)與另一個(比如http://production:port/URI)。誰能幫忙?shell腳本遞歸瀏覽一個目錄並替換一個字符串
如果該腳本可以打印出修改過的文件並將搜索/替換模式作爲輸入參數,那將會好得多。
問候。
試試這個
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
希望這有助於。
請注意,舊文件將保存爲* .bak,它間接滿足要求:「打印出修改過的文件」。 – 2008-09-23 23:04:00
這聽起來像你會從間接層獲益。 (但那麼,誰不會呢?)
我在想你可以在一個位置有特殊的字符串。在運行時引用配置設置,或在構建時使用正確的字符串生成這些文件。稍有更多的反饋
find . -type f | xargs grep -l development | xargs perl -i.bak -p -e 's(http://development)(http://production)g'
另一種方法:
找到。 -type f | xargs sed -i s/pattern/replacement/g
額外的注意:你必須在模式中用反斜槓來引號:... sed -i s/\「hello \」/ hi/g – nickf 2009-01-05 02:35:09
使用zsh
所以對於高級globing,只能使用一個命令。 例如: -
sed -i 's:pattern:target:g' ./**
HTH
不要試圖在上述範圍內工作的svn/cvs的目錄,因爲它也將修補的.svn /將該.cvs,這絕對不是你想要的。例如,要避免.svn修改,請使用find。 -type f | fgrep -v .svn | xargs sed -i's/pattern/replacement/g'
什麼平臺?你會接受哪些語言? – 2008-09-23 22:49:13