[英]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.