当" perl -n"

时间:2015-04-02 15:09:53

标签: linux perl unix command-line

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

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

#!/usr/bin/perl -wn

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

上述内容对我不起作用。 $_卡在同一行/内容中。

2 个答案:

答案 0 :(得分:2)

它对我有用:

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

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

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

<>本身不会填充$_ - 仅限于while (<>)的特殊情况。

答案 1 :(得分:1)

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

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

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