簡體   English   中英

Perl:通過STDIN從'tail -f'管道讀取

[英]Perl: Reading from a 'tail -f' pipe via STDIN

還有很多其他類似的線程,但通常的結論是“Install File :: Tail”。 但是,我在一個舊盒子上,我們正在退役,我只想寫一個單行來監視日志。 我嘗試安裝File :: Tail,但CPAN的環境不起作用,我不想花時間弄清問題是什么。

我只想要一個基本腳本來解析一個IP地址,並為我保留一個計數。 但是出於某種原因,即使這個簡單的測試也行不通:

$ tail -f snmplistener.log|grep IPaddress |perl -ne 'print "LINE: $_\n";'

我認為它與輸出緩沖有關,但我總是對它的工作原理有點模糊。 我怎樣才能使這個單線工作?

tail -f通常不會緩沖輸出,但grep可能會這樣做。 將“grep”功能移動到Perl one-liner中:

tail -f snmplistener.log | perl -ne 'print "LINE: $_\n" if /IPaddress/'

男人grep

--line-buffered
      Use line buffering on output.  This can cause a performance penalty.

所以:

tail -f /log/file.txt | grep --line-buffered SomePattern | perl ...

或者根本不使用尾巴:

perl -e 'open($h,$ARGV[0]); while (1) { /IPaddress/ and print "LINE: $_" for <$h>; sleep 1 }' snmplistener.log

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM