我正在使用下面的代码,似乎无法使搜索字词匹配多行的字符串。
!/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
答案 0 :(得分:2)
以下是使用bash和Perl进行操作的方法:
shopt -s globstar nullglob
cd $searchdirectory
perl -0777 -i.bak -pe "s/$searchterm/$replaceterm/g" **
perl的-0777
选项读取整个文件,而不是逐行读取。然后模式匹配可以立即在整个文件上工作。我假设你的文件不是很大。
我还假设您没有任何带空格或换行符的文件名。
请注意,它会触及每个文件。您可以在之后扫描目录,以删除file.bak
未更改的任何file
。