检查当前和下一行中的模式时的Perl loopproblem

时间:2014-12-08 11:29:34

标签: regex perl while-loop

我有一个像这样的文件

1 XXXX jimmy XXXXX XXXXX
2 XXXX johny XXXXX XXXXX
3 XXXX jimmy XXXXX XXXXX
4 XXXX jimmy XXXXX XXXXX
5 XXXX johny XXXXX XXXXX

我想循环浏览文件和打印行只有当前行有jimmy且连续行有johny

我已编写代码来检查下一行,如果当前行与模式匹配但编码没有循环遍历每一行,例如我正在

输出上述文件为

1 XXXX jimmy XXXXX XXXXX
2 XXXX johny XXXXX XXXXX

以下是我的代码的一部分

while($line=<ABC>){
    $c1=(split (/\s+/, $line))[1];
    if($c1 eq 'jimmy'){
        $i=0;
        while ($i<1){
            $line2 = <ABC> ;
            $i++;
            $c12=(split (/\s+/, $line2))[1];
            if($c12 eq 'johny') {
                print $line."\n".$line2."\n";
            }

1 个答案:

答案 0 :(得分:3)

#!/usr/bin/perl
use strict;
use warnings;
my $ln;
while(my $line = <DATA>){
    if($ln && $ln =~ /jimmy/ && $line =~ /johny/){
        #print whatever you need to
        print "ln is: $ln line is $line";
    }
    $ln = $line;
}
__DATA__
1 XXXX jimmy XXXXX XXXXX
2 XXXX johny XXXXX XXXXX
3 XXXX jimmy XXXXX XXXXX
4 XXXX jimmy XXXXX XXXXX
5 XXXX johny XXXXX XXXXX

Demo