Ubuntu

tail -f,但帶有行號

  • October 15, 2021

我試圖查看在任意時間內在遠端伺服器上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

也適用於我。編號從“拖尾”的開頭重新開始,而不是整個日誌文件的開頭。

引用自:https://unix.stackexchange.com/questions/109827