繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM