首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Perl:通过标准输入从“tail-f”管道中读取

Perl:通过标准输入从“tail-f”管道中读取
EN

Stack Overflow用户
提问于 2011-11-10 03:15:12
回答 3查看 6.5K关注 0票数 6

还有许多其他类似的线程,但通常的结论类似于"Install File::Tail“。但是,我在一个旧机器上,我们正在释放它,我只想写一个一行程序来监控日志。我尝试安装File::Tail,但是CPAN的环境就是不工作,我不想花时间找出问题所在。

我只想要一个基本的脚本,解析出一个IP地址,并为我保留它的计数。然而,由于某些原因,即使是这个简单的测试也不起作用:

代码语言:javascript
复制
$ tail -f snmplistener.log|grep IPaddress |perl -ne 'print "LINE: $_\n";'

我认为这与输出缓冲有关,但我一直对它的工作原理有点模糊。我怎样才能让这一行程序工作呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-10 03:23:50

tail -f通常不缓冲输出,但grep可能会缓冲输出。将"grep“功能移到Perl一行程序中:

代码语言:javascript
复制
tail -f snmplistener.log | perl -ne 'print "LINE: $_\n" if /IPaddress/'
票数 10
EN

Stack Overflow用户

发布于 2011-12-20 19:17:25

man grep

代码语言:javascript
复制
--line-buffered
      Use line buffering on output.  This can cause a performance penalty.

所以:

代码语言:javascript
复制
tail -f /log/file.txt | grep --line-buffered SomePattern | perl ...
票数 2
EN

Stack Overflow用户

发布于 2011-11-10 03:32:24

或者根本不使用tail:

代码语言:javascript
复制
perl -e 'open($h,$ARGV[0]); while (1) { /IPaddress/ and print "LINE: $_" for <$h>; sleep 1 }' snmplistener.log
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8070280

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档