Perl:匹配后打印所有行
Perl : Print all lines after match
我正在尝试用 perl 解析文件。我想在正则表达式匹配后打印所有行
比如文件是
num_of_dogs,10,#start_reading
num_of_cat,15
num_birds,20
num_of_butterfly,80
.....
我想要比赛后的所有台词#start_reading
我试过了,但它只打印下一行
while (my $line = <$csv_file>) {
next unless $line =~ /(.*),#end_of_tc/;
if ($line =~ /(.*)/){
print $file = ;
}
}
输出看起来像这样
num_of_cats,15
num_of_birds,20
......
提前致谢
您可以在行包含 #start_reading
时设置标志,并且仅在标志为真时打印该行:
while (my $line = <$csv_file>) {
print $line if $start;
$start ||= $line =~ /#start_reading/;
}
而如果遇到#stop_reading
后想停止阅读:
while (my $line = <$csv_file>) {
print $line if $print;
$print ||= $line =~ /#start_reading/;
$print &&= $line !~ /#stop_reading/;
}
您也可以使用触发器 (..
) 运算符绕过从文件开头到包含 #start_reading
的所有行
while (<$fh>) {
next if 1 .. /#start_reading/;
print;
}
这会绕过从文件第 1 行打印到匹配 #start_reading
的行。然后打印文件中剩余的行。
perl -ne 's/.+\,#start_reading\s*/next/e; print $_' d
通过 gnu sed,如果您的数据在 'd',
sed -En '/.+,#start_reading/{:s n; $q;p; bs }' d
一种仅在特定时间点之后处理文件的高效且简洁的方法
last if /#start_reading/ while <$csv_file>; # get past that point in file
while (<$csv_file>) { print } # now work on it
这可以通过以下命令实现。 /xxx/../yyy/
让 perl 打印两个匹配项之间的文本。在您的情况下,第二个匹配只是文件结尾,因此请使用关键字 EOF
.
perl -ne 'print if /^match/../EOF/'
我正在尝试用 perl 解析文件。我想在正则表达式匹配后打印所有行
比如文件是
num_of_dogs,10,#start_reading
num_of_cat,15
num_birds,20
num_of_butterfly,80
.....
我想要比赛后的所有台词#start_reading
我试过了,但它只打印下一行
while (my $line = <$csv_file>) {
next unless $line =~ /(.*),#end_of_tc/;
if ($line =~ /(.*)/){
print $file = ;
}
}
输出看起来像这样
num_of_cats,15
num_of_birds,20
......
提前致谢
您可以在行包含 #start_reading
时设置标志,并且仅在标志为真时打印该行:
while (my $line = <$csv_file>) {
print $line if $start;
$start ||= $line =~ /#start_reading/;
}
而如果遇到#stop_reading
后想停止阅读:
while (my $line = <$csv_file>) {
print $line if $print;
$print ||= $line =~ /#start_reading/;
$print &&= $line !~ /#stop_reading/;
}
您也可以使用触发器 (..
) 运算符绕过从文件开头到包含 #start_reading
while (<$fh>) {
next if 1 .. /#start_reading/;
print;
}
这会绕过从文件第 1 行打印到匹配 #start_reading
的行。然后打印文件中剩余的行。
perl -ne 's/.+\,#start_reading\s*/next/e; print $_' d
通过 gnu sed,如果您的数据在 'd',
sed -En '/.+,#start_reading/{:s n; $q;p; bs }' d
一种仅在特定时间点之后处理文件的高效且简洁的方法
last if /#start_reading/ while <$csv_file>; # get past that point in file
while (<$csv_file>) { print } # now work on it
这可以通过以下命令实现。 /xxx/../yyy/
让 perl 打印两个匹配项之间的文本。在您的情况下,第二个匹配只是文件结尾,因此请使用关键字 EOF
.
perl -ne 'print if /^match/../EOF/'