【问题标题】:Perl : match multiple linesPerl:匹配多行
【发布时间】:2019-07-23 18:38:37
【问题描述】:

使用 perl 正则表达式,如果两个连续的行匹配,则计算行数。

我想要直到匹配模式的行数

D001
0000
open ($file, "$file") || die; 
   my @lines_f = $file;
   my $total_size = $#lines_f +1;

   foreach my $line (@lines_f)
   {
       if ($line =~ /D001/) {
           $FSIZE = $k + 1;
       } else { 
           $k++;}
    }  

除了 D001,我还想检查下一行是否为 0000。如果是,$FSIZE 是 $file 大小。 $file 看起来像这样

00001 
00002
.
.
.
D0001
00000
00000

【问题讨论】:

  • 请包括输入文件$file 的一个小示例以及该文件的预期输出。然后显示另一个不包含D001 的文件,以及该文件的相应输出。例如:“预期输出是:$FSIZE = 5”或类似的东西
  • 感谢您的更新!您包含的文件的预期输出是什么?如果删除带有“。”的行?如果缺少D0001 的行,预期的输出是什么?
  • 删除 '.' 时的预期输出将是 3。基本上,我想计算直到分隔符的行数。下一行中的分隔符是“D0001”和“0000”。

标签: regex perl line


【解决方案1】:

这是一个例子。如果找不到标记线,这会将 $FSIZE 设置为 undef

use strict;
use warnings;

my $fn = 'test.txt';
open ( my $fh, '<', $fn ) or die "Could not open file '$fn': $!";
chomp (my @lines = <$fh>);
close $fh;

my $FSIZE = undef;
for my $i (0..$#lines) {
    if ($lines[$i] =~ /D0001/) {
        if ( $i < $#lines ) {
            if ( $lines[$i+1] =~ /00000/ ) {
                $FSIZE = $i + 1;
                last;
            }
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多