在许多文件中用多行替换字符串

时间:2013-12-05 17:07:02

标签: linux bash sh

我正在使用下面的代码,似乎无法使搜索字词匹配多行的字符串。

!/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

1 个答案:

答案 0 :(得分:2)

以下是使用bash和Perl进行操作的方法:

shopt -s globstar nullglob
cd $searchdirectory
perl -0777 -i.bak -pe "s/$searchterm/$replaceterm/g" **

perl的-0777选项读取整个文件,而不是逐行读取。然后模式匹配可以立即在整个文件上工作。我假设你的文件不是很大。 我还假设您没有任何带空格或换行符的文件名。

请注意,它会触及每个文件。您可以在之后扫描目录,以删除file.bak未更改的任何file