从log tail中提取匹配的行后退出

时间:2014-08-12 13:50:31

标签: perl

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

tail -F logfile | perl -ne 'print if /b/ .. /d/;'

现在我尝试在提取的部分匹配后退出流程。我尝试过:

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

但这并没有打印出最后一行。如何在不丢失最后一行的情况下退出?

1 个答案:

答案 0 :(得分:4)

有重复绑定检查的明显解决方案。

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结尾的字符串(科学记数法意为×10 0 )来提醒来电者它已经失败。

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/;
'