在perl中匹配的行之后抓取行

时间:2011-07-28 20:21:25

标签: perl

如何在匹配模式的行之后访问所有行 例如

  

BCDA
  ABCD
  AAAABBBBCCCCDDD
  AAAAAABBBBBBCCC
  AAAAAAAAAAAAAA

所以基本上在模式ABCD匹配后我想处理它之后的所有行。把它放在一个数组中。所以只进行一次模式匹配。

2 个答案:

答案 0 :(得分:4)

这是我能想到的最简单的例子。 它将“后面的所有行”放入匹配成数组的行中。

my @lines;
while ( <$in> ) { 
    next unless m/ABCD/;
    # in an list context, this will slurp the rest of the file.
    @lines = <$in>;
}

答案 1 :(得分:3)

有点不清楚,但这就是你追求的目标吗?

range operator适用于此类任务:

#!/usr/bin/perl

my @array;

while (<DATA>)  {
  push @array, $_ if /ABCD/ .. 0
}
shift(@array);

print @array;

__DATA__
BCDA
ABCD
AAAABBBBCCCCDDD
AAAAAABBBBBBCCC
AAAAAAAAAAAAAA

输出:

AAAABBBBCCCCDDD
AAAAAABBBBBBCCC
AAAAAAAAAAAAAA