-n
参数导致Perl在程序周围放置一个循环,这使得它迭代文件名参数,有点像sed -n
或awk
。
现在,是否可以使用-n
在脚本中提前跳过抓取一些即将到来的线条?
#!/usr/bin/perl -wn
if (/my case/) {
# Skip two lines
<>; <>;
# Do something with the line just read.
}
上述内容对我不起作用。 $_
卡在同一行/内容中。
答案 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];
...
}
'