0

我想问你一些建议。我的代码看起来像接下来的几行:

#!/usr/bin/env perl

while (<DATA>) {
 if (/\bSTART\b/ .. /\bEND\b/) {
    #$together = $_;
    #$together = chomp ($_);  
    print ($_, "\n");   
 }
}

__DATA__
rubish
rub
START Data Data Data start 15.05.2015 Data i want end Data 
END
rubishend

*****************
example:
START new line 1 line 2new line 3 END
*****************

我的目标是过滤许多行日志。输出是匹配正则表达式的一两行。但是输出可以是一行--> 这就是我想要的。或双行,在这种情况下,我需要将第二行加入到第一行的末尾。我的代码输出如下所示:

START Data Data Data start 15.05.2015 Data i want end Data 
END
START new line 1 line 2new line 3 END

我想要的是:

START Data Data Data start 15.05.2015 Data i want end Data END
START new line 1 line 2new line 3 END

任何提示如何区分两条线输出并将其连接成一条线?为了在接下来的步骤中更好地解析?感谢您的回答

4

1 回答 1

2

来自触发器操作员的文档:

返回的值要么是空字符串(表示 false),要么是序列号(以 1 开头)表示 true。[...] 范围内的最终序列号附加了字符串“E0”

所以,

while (<DATA>) {
   if (my $i = /\bSTART\b/ .. /\bEND\b/) {
      s/\n/ / if $i !~ /E0\z/; 
      print;
   }
}

没有触发器运算符:

my $in = 0;
while (<DATA>) {
   if ($in ||= /\bSTART\b/) {
      if (/\bEND\b/) {
         $in = 0;
      } else {
         s/\n/ /;
      }
      print;
   }
}
于 2016-02-09T15:33:53.087 回答