我需要搜索一个模式并将该行和接下来的3行写入文件(FILE)中。这种方法正确吗?谢谢。
print FILE if /^abc/;
$n=3 if /^abc/;
print FILE if ($n-- > 0);
我需要搜索一个模式并将该行和接下来的3行写入文件(FILE)中。这种方法正确吗?谢谢。
print FILE if /^abc/;
$n=3 if /^abc/;
print FILE if ($n-- > 0);
我喜欢..
操作符:
perl -ne 'print if (/abc/ and $n=3) .. not $n--'
但是你没有描述如果以下三行重复出现abc模式会发生什么。如果你想重新开始计数,你的方法是正确的,只需要修复一下双打印的小错误即可。
perl -ne'$n=4 if/abc/;print if$n-->0'
grep abc --after-context=3
while( <$input> ) {
$n=4 if /^abc/;
print FILE if ($n-- > 0);
}
不需要一次性读入文件或试图将代码写在单行中:
#!/usr/bin/perl
use strict;
use warnings;
while ( my $line = <DATA> ) {
if ( $line =~ /^abc/ ) {
print $line;
print scalar <DATA> for 1 .. 3;
}
}
__DATA__
x
y
z
abc
1
2
3
4
5
6
另一个可能的解决方案...
#!/usr/bin/perl
use strict;
my $count = 0;
while (<DATA>) {
$count = 1 if /abc/;
if ($count >= 1 and $count <= 3) {
next if /abc/;
print;
$count++;
}
}
__DATA__
test
alpha
abc
1
234123
new_Data
test
我宁愿多写几行代码,让所有东西更加清晰。像这样的代码应该可以工作:
my $count = 0;
while ( my $line = pop @file ) {
if ( /^abc/ ) {
$count = 4;
}
if ( $count > 0 ) {
print FILE $line;
$count--;
}
}
编辑以回应评论: