我需要删除一个段直到分隔符“);”在使用perl脚本的文件中的两行或三行搜索关键字之后

时间:2016-03-10 08:06:22

标签: regex perl

Iam尝试删除测试段经常发生在文件中。我有一个匹配的关键字let suppose

FIND_WORD(---------
            -----------
             -----------); 

在“);”的2行或3行后终止,但我需要删除下几行,直到“);

我正在使用

if ($line =~ m/FIND_WORD/) {return 0;}

删除一行 我需要删除“);

2 个答案:

答案 0 :(得分:2)

听起来这正是触发器操作员的用途。

while (<>) {
  print unless /FIND_WORD\(/ .. /\);/;
}

来自perlop

  

在标量上下文中,&#34; ..&#34;返回一个布尔值。运营商是   双稳态,如触发器,并模拟行范围(逗号)   sed,awk和各种编辑的运营商。每个&#34; ..&#34;操作者   即使在调用子例程时,它也会保持自己的布尔状态   包含它。只要其左操作数为假,它就是假的。   一旦左操作数为真,范围运算符将保持为真,直到   右操作数为true,范围运算符变为false   试。

有关详细信息,请参阅this recent GeekUni blog post

答案 1 :(得分:1)

您需要使用多行匹配。您需要将整个文件粘贴到变量中,然后替换它。

$all_lines =~ s/FIND_WORD.*?\)\;//sg;

这从FIND_WORD匹配到最近的“);”并删除它。