我正在使用下面的代码,但似乎无法让 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
。
关于linux - 在许多文件中用多行替换字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20406243/