Ubuntu
tail -f,但帶有行號
我試圖查看在任意時間內在遠端伺服器上
foo bar
出現了多少次/var/log/foo.log
,但到目前為止我嘗試過的任何方法都沒有奏效。我已經有一個計時器腳本,我用它來跟踪自從我開始 tailing 以來已經過了多長時間
/var/log/foo.log
,現在我只想知道有多少次foo bar
出現在 tailed 輸出中。我搜尋了Google,但在結果的前 10 頁中沒有找到任何相關內容。
這是我嘗試過的令人沮喪的結果:
## works on local machine, but doesn't work as expected on remote tail -f /var/log/foo.log | grep foo\ bar | sed '=' ## works on local, but not remote tail -f /var/log/foo.log | grep foo\ bar | cat -n - ## works on local, but not remote tail -f /var/log/foo.log | grep foo\ bar | awk -F'\n' '{printf "[%d]> ", NR; print $1}'
我什至嘗試編寫一個類似 sed 的腳本
tail -f
,但我在這方面取得了有限甚至沒有進展。筆記
遠端伺服器正在執行舊版本的 coreutils,升級是一種選擇,但無論如何都不是所需的解決方案**。**
tail -f | nl
對我有用,這是我想到的第一個 - 也就是說,如果你真的想要從 1 開始編號的行,而不是觀看文件中的真實行號。如果需要,可以選擇添加
grep
到適當的位置(之前或之後nl
)。但是,請記住,可能會發生緩衝。在我的特殊情況下,grep
有--line-buffered
選項,但nl
緩衝它的輸出並且沒有選項來關閉它。因此,tail | nl | grep
組合併不能很好地流動。也就是說,
tail -f | grep -n pattern
也適用於我。編號從“拖尾”的開頭重新開始,而不是整個日誌文件的開頭。