【问题标题】:Skip lines when "perl -n"跳过行时“的perl -n”
【发布时间】:2015-06-07 14:37:44
【问题描述】:

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

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

#!/usr/bin/perl -wn

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

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

【问题讨论】:

    标签: linux perl unix command-line


    【解决方案1】:

    它对我有用:

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

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

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

    &lt;&gt; 本身不会填充 $_ - 仅在 while (&lt;&gt;) 的特殊情况下。

    【讨论】:

    • " 本身不会填充 $_ - 仅在 while () 的特殊情况下。”,啊,这就是我的意思。谢谢!!!
    【解决方案2】:

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

    perl -ne'
       push @buf, $_;
       next if @buf <= 3;
       shift(@buf);
    
       if ($buf[0] =~ /c/) {
          my $line1 = $buf[1];
          my $line2 = $buf[2];
          ...
       }
    '
    

    【讨论】:

      猜你喜欢
      • 2013-03-25
      • 1970-01-01
      • 1970-01-01
      • 2021-02-18
      • 1970-01-01
      • 1970-01-01
      • 2015-01-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多