使用sed在多个文件中搜索和替换,包含开始和结束字符串

时间:2015-10-16 15:27:38

标签: string replace sed grep find

我们正在尝试使用sed(或其他任何其他内容)查找或编写脚本,搜索目录中的每个文件(包括子文件夹),匹配开始和结束字符串,然后删除开头,中间内容并从文件中结束字符串。

找到我们需要的确切命令很难找到。帮助赞赏。

感谢。

2 个答案:

答案 0 :(得分:0)

您可以使用perl来利用range operator

举个例子:

#!/usr/bin/env perl
use strict;
use warnings;

while ( <DATA> ) { 
     print unless m/START_TAG_HERE/ ... m/END_TAG_HERE/;
}

__DATA__
Some text 
more text
even more text
A line with START_TAG_HERE
some text to delete
don't want this
END_TAG_HERE
and this should print now. 

您可以使用File::Find以递归方式搜索目录结构并执行此操作。 perl也支持就地编辑(例如sed),但与File::Find结合起来有点复杂。

但你可能会发现:

perl -i.bak -ne 'print unless m/START_TAG_HERE/ ... m/END_TAG_HERE/;' somefile

会做的伎俩。然后,您可以将其与find命令组合使用。

答案 1 :(得分:0)

您可以尝试以下步骤

Start Pattern ='This'

结束模式='测试'

匹配开始和结束模式

Snow

删除开始模式

     grep -e '^This.*testing$' -R Foldername/

删除结束模式

      grep -e '^This.*testing$' -R testing/  | sed 's/\('This'\)\(.*\)/\2/'

示例:

匹配开始和结束模式:

      grep -e '^This.*testing$' -R testing/  | sed 's/\('.*'\)\('testing'\)/\1/'

删除开始模式

  $  grep -e '^This.*testing$' -R testing/  
   testing/test/file3:This is for my best testing
   testing/test/file4:This is small testing
   testing/file2:This is for final testing
   testing/file1:This is for model testing

删除结束图案

     $ grep -e '^This.*testing$' -R testing/  | sed 's/\('This'\)\(.*\)/\2/'
    testing/test/file3: is for my best testing
    testing/test/file4: is small testing
    testing/file2: is for final testing
    testing/file1: is for model testing

删除开始和结束模式

    grep -e '^This.*testing$' -R testing/  | sed 's/\('.*'\)\('testing'\)/\1/'
   testing/test/file3:This is for my best 
   testing/test/file4:This is small 
   testing/file2:This is for final 
   testing/file1:This is for model