Shell脚本以递归方式浏览目录并替换字符串
时间:2020-03-06 14:37:59 来源:igfitidea点击:
我需要递归搜索目录,并在所有找到的文件中都用另一个字符串(例如http:// production:port / URI)替换一个字符串(例如http:// development:port / URI)。有人可以帮忙吗?
如果该脚本可以打印出修改后的文件并将搜索/替换模式作为输入参数,那就更好了。
问候。
解决方案
听起来我们将从间接层中受益。 (但是,谁不会呢?)
我想我们可以在一个位置使用特殊字符串。在运行时引用配置设置,或者在构建时使用正确的字符串生成这些文件。
试试这个:
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
希望这可以帮助。
找 。型f | xargs sed -i s / pattern / replacement / g
使用zsh
,因此在高级搜索中只能使用一个命令。
例如。:
sed -i 's:pattern:target:g' ./**
高温超导
不要在工作的svn / cvs目录中尝试上述操作,因为它还会修补.svn / .cvs,这绝对不是我们想要的。例如,要避免.svn修改,请使用find。型f | fgrep -v .svn | xargs sed -i's / pattern / replacement / g'