1. 程式人生 > >如何實現Linux下高亮關鍵字的tail -f功能

如何實現Linux下高亮關鍵字的tail -f功能

公司內部一哥們釋出到郵件列表中的一個小tip,挺有意思,屬於程式設計師的“奇淫技巧”類吧,值得記錄一下。
如果你在linux下工作,那用tail -f跟蹤一個日誌檔案的輸出內容應該是家常便飯了。
但是,有時你更關心的是一些敏感字詞,希望能夠在動態跟蹤的同時,把這些字詞高亮出來,比如日誌中的ERROR關鍵字。
那麼,一種思路就是把你tail輸出的東西再做一次包裝處理,這個很符合linux管道處理的思想。以高亮Log中的ERROR為例,你可以這樣:

tail -f xxx.log | perl -pe 's/(ERROR)/\e[1;31m$1\e[0m/g'  

其中,xxx.log是你要跟蹤的檔案。這裡假設了你的Linux的PATH中有perl。perl在這裡乾的事情,就是通過命令列的方式進行動態的替換ERROR字串的操作,替換過程中,主要使用了Linux的console_codes的語法結構。(具體關於console_codes的細節,可以通過man console_codes進行了解)這裡,\e主要進行轉移說明。
如果你手頭有server log之類的日誌,試試上面的命令,是不是把ERROR全部標紅了。
利用這個原理,你完全可以按照你所需要的顏色高亮你感興趣的輸出,具體的顏色說明,可以在man console_codes中查到。
另外,less本身也支援類似於tail -f的操作,就是在你用less開啟一個檔案之後,按住SHIFT+F鍵,這樣就直接進入follow的模式了。看上去跟tail -f效果是一致的。利用這點,你想達到高亮的tail -f的效果,就攏共分為以下3步了:

  1. less xxx.log
  2. 中/${key_work}的方式搜尋你要高亮的關鍵字。(即使目前檔案中沒有也沒關係)
  3. SHIFT+F,進入follow模式

結束收工!

附加內容:

tail -f /path/to/file.log | sed '/^Finished: SUCCESS$/ q'

當file.log裡出現Finished: SUCCESS時候就退出tail,這個命令用於實時監控並過濾log是否出現了某條記錄。