[英]replacing a string with multiple lines in many files
我正在使用下面的代码,并且似乎无法使searchterm匹配多行的字符串。
!/bin/bash
# **************** Change Variables Here ************
startdirectory="/home/www"
searchterm="<img src=\"index.gif\">
<p>Hello World</p>
"
replaceterm="Hi"
# **********************************************************
i=0;
for file in $(grep -l -R $searchterm $startdirectory)
do
cp $file $file.bak
sed -e "s/$searchterm/$replaceterm/ig" $file > tempfile.tmp
mv tempfile.tmp $file
let i++;
echo "Modified: " $file
done
echo " *** All Done! *** Modified files:" $i
以下是使用bash和Perl执行此操作的方法:
shopt -s globstar nullglob
cd $searchdirectory
perl -0777 -i.bak -pe "s/$searchterm/$replaceterm/g" **
perl的-0777
选项读取整个文件,而不是逐行读取。 然后模式匹配可以立即在整个文件上工作。 我假设你的文件不是很大。 我还假设你没有任何带空格或换行符的文件名。
请注意,它将触及每个文件。 您可以在之后扫描目录以删除file
中未更改的任何file.bak
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.