Perl 从日志尾提取匹配行后退出

Perl 从日志尾提取匹配行后退出,perl,Perl,我正在使用范围运算符提取日志文件的一部分,例如: tail -F logfile | perl -ne 'print if /b/ .. /d/;' 现在,我试图在匹配提取的部分后退出该过程。我试过: tail -F logfile | perl -ne 'print if /b/ .. (/d/ and exit);' 但这不会打印最后一行。如何使其退出而不丢失最后一行?有一个明显的解决方案,即重复绑定检查 tail -F logfile | perl -ne' next if !(

我正在使用范围运算符提取日志文件的一部分,例如:

tail -F logfile | perl -ne 'print if /b/ .. /d/;'
现在,我试图在匹配提取的部分后退出该过程。我试过:

tail -F logfile | perl -ne 'print if /b/ .. (/d/ and exit);'

但这不会打印最后一行。如何使其退出而不丢失最后一行?

有一个明显的解决方案,即重复绑定检查

tail -F logfile | perl -ne'
   next if !(/b/ .. /d/);
   print;
   last if /d/;
'
但让我们看看其他选择。查看
返回的内容

$ echo -en 'a\nb\nc\nd\ne\n' | perl -nlE'my $ff = /b/ .. /d/; say "$_: $ff"'
a:
b: 1
c: 2
d: 3E0
e:
它使用一个以
E0
结尾的字符串(科学符号的意思是×100)来提醒调用者它失败了

tail -F logfile | perl -ne'
   my $ff = /b/ .. /d/;
   print if $ff;
   last if $ff =~ /E0/;
'
使用人字拖并没有多大帮助

tail -F logfile | perl -ne'
   next if !($in ||= /b/);
   print;
   last if /d/;
'

有一个显而易见的解决办法,就是重复边界检查

tail -F logfile | perl -ne'
   next if !(/b/ .. /d/);
   print;
   last if /d/;
'
但让我们看看其他选择。查看
返回的内容

$ echo -en 'a\nb\nc\nd\ne\n' | perl -nlE'my $ff = /b/ .. /d/; say "$_: $ff"'
a:
b: 1
c: 2
d: 3E0
e:
它使用一个以
E0
结尾的字符串(科学符号的意思是×100)来提醒调用者它失败了

tail -F logfile | perl -ne'
   my $ff = /b/ .. /d/;
   print if $ff;
   last if $ff =~ /E0/;
'
使用人字拖并没有多大帮助

tail -F logfile | perl -ne'
   next if !($in ||= /b/);
   print;
   last if /d/;
'