"perl -n" 时跳行

Skip lines when "perl -n"

-n 参数导致 Perl 在程序周围放置一个循环,这使得它迭代文件名参数有点像 sed -nawk

现在,是否可以使用-n在脚本中提前跳过抓取一些即将到来的行?

#!/usr/bin/perl -wn

if (/my case/) {
  # Skip two lines
  <>; <>;
  # Do something with the line just read.
}

以上内容对我不起作用。 $_ 卡在同一个 line/content。

对我有用:

perl -wE 'say for 1..10' | perl -ne 'if (/2/) { <>; <>; print "!$_" } else { print }'
1
!2
5
6
7
8
9
10

如果要处理接下来的两行,将它们存储在变量中。

$line1 = <>; $line2 = <>;

<> 本身不会填充 $_ - 仅在 while (<>).

的特殊情况下

另一种方法是使用滑动 window 缓冲区。

perl -ne'
   push @buf, $_;
   next if @buf <= 3;
   shift(@buf);

   if ($buf[0] =~ /c/) {
      my $line1 = $buf[1];
      my $line2 = $buf[2];
      ...
   }
'