我使用范围运算符来提取日志文件的一部分,例如:
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/