perl - 从日志尾部提取匹配行后退出

标签 perl

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

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

现在,一旦提取的部分匹配,我就尝试退出该过程。我尝试过:

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

但这不会打印最后一行。我怎样才能让它退出而不丢失最后一行?

最佳答案

有一个显而易见的解决方案:重复绑定(bind)检查。

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

关于perl - 从日志尾部提取匹配行后退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25266058/

相关文章:

perl - 我如何解释这个 if 语句

perl - cpanm 如何检索需要用户名和密码的代理设置

mysql - 在 Mac OSX 上运行 mysqltuner

perl - 是否存在与接口(interface)等效的 OO Perl?

java - 有 GraphViz 的 3D 版本吗?

perl - 哈希的自定义排序方法,它将自动使用适当的哈希

arrays - 如何在 Perl 6 中将未展平的数组重复传递给 reduce?

perl - 将 CruiseControl 转换为 Hudson

perl - 正确且可移植的 utf8 文件名规范化

perl - 在 Perl 中,如何将字节数组转换为 Unicode 字符串?