Command-Line

如何讓 tail -f 顯示彩色輸出

  • February 22, 2022

我希望能夠跟踪包含以下消息的伺服器日誌文件的輸出:

INFO
SEVERE

等,如果是SEVERE,則以紅色顯示該行;如果是INFO,則為綠色。tail我可以為可以幫助我執行此操作的命令設置什麼樣的別名?

試試multitail ¹。這是 的超泛化tail -f。您可以在單獨的視窗中觀看多個文件,根據內容突出顯示行等。

multitail -c /path/to/log

顏色是可配置的。如果預設配色方案不適合您,請在配置文件中編寫您自己的配色方案。例如,multitail -cS amir_log /path/to/log使用以下內容呼叫~/.multitailrc

colorscheme:amir_log
cs_re:green:INFO
cs_re:red:SEVERE

如果您在不方便安裝非標準工具的伺服器上,另一種解決方案是結合tail -fsed 或 awk 來添加顏色選擇控制序列。這需要tail -f立即刷新其標準輸出,即使其標準輸出是管道,我不知道是否所有實現都這樣做。

tail -f /path/to/log | awk '
 /INFO/ {print "\033[32m" $0 "\033[39m"}
 /SEVERE/ {print "\033[31m" $0 "\033[39m"}
'

或與sed

tail -f /path/to/log | sed --unbuffered \
   -e 's/\(.*INFO.*\)/\o033[32m\1\o033[39m/' \
   -e 's/\(.*SEVERE.*\)/\o033[31m\1\o033[39m/'

如果您的 sed 不是 GNU sed,請用\o033文字轉義字元替換並刪除--unbuffered.

另一種可能性是tail -fEmacs shell 緩衝區中執行並使用 Emacs 的語法著色功能。

¹歷史網站於 2021 年初消失。最新版本仍可在許多發行版中使用,例如ArchDebian

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