Text-Processing
Shell - 根據模式自定義日誌文件每一行的顏色
我想更改使用 wim、less 或其他方式顯示大(約 6000 行)日誌文件的方式,以簡化問題檢查。
我想突出顯示基於模式(即,…)的日誌中的某些行
error
和warning
/info
或隱藏其他一些行。我可以使用哪些工具?我只需要一個shell腳本嗎?重要的是,在此過程之後,我可以使用 less、vim、… 讀取輸出來執行搜尋操作!
編輯:一小段日誌:
2016/10/25 12:19:24.403355 INFO <ServiceManager.cpp#2614 TID#3> Security object has NOT been parsed 2016/10/25 12:19:24.403369 INFO <ServiceManager.cpp#1263 TID#3> Service object sequence started 2016/10/25 12:19:24.403372 DBG <ServiceManager.cpp#1276 TID#3> preinvoke succeeded
我會推荐一個基於
awk
Valentin B. 解決方案的 shell 腳本:$ cat colorize awk ' function color(c,s) { printf("\033[%dm%s\033[0m\n",30+c,s) } /error/ {color(1,$0);next} /success/ {color(2,$0);next} /warning/ {color(3,$0);next} /INFO/ {color(4,$0);next} /DBG/ {color(5,$0);next} {print} ' $1
為了能夠以互動方式查看彩色輸出,我會
less
在原始模式下使用,例如:colorize mylog.txt | less -R
awk
,正如其他答案中提到的,絕對是首先要達到的工具。但從長遠來看,它並不是唯一的工具。
AL Lambert’s
logtool
是專門為後處理日誌文件而設計的,並且有一個複雜的(而且文件很糟糕)配置系統,允許一個人為 13 種顏色中的每一種分配一個充滿正則表達式的文件。貓 *.log | 日誌工具
它具有理解具有 TAI64N 時間戳的日誌的區別。
為此,添加:
著色問題
唉,其中一些工具的著色非常錯誤。它們硬連線控制序列,而不是使用terminfo 中的
setaf
/setab
等。另請注意,由於更微妙的原因,著色很棘手,幾乎沒有著色程序能做到這一點。為了讓它完全正確,著色器必須處理自動邊距和 DEC VT掛起換行機制,我還沒有看到任何著色器這樣做。GNU
grep
在這方面有一個相當著名的著色錯誤,但這不是僅限於grep
.進一步閱讀