Linuxパソコン・サーバー上のコマンドライン言語、Bashにおいて、標準出力の検索文字列、特定文字列(例えばエラー文字、警告文字など)を色付け(ハイライト)する方法について紹介します。
pip
とかインストール系のコマンドの出力でありがちなのが、できなくてエラーが出てるっぽいけど一体全体どこでエラー出てるのがわからないっていう事態。
stderrじゃなくてstdoutなのでそこらへんで色分けが自動でされない場合や、文字列がerror
じゃなくてfailure
やらfailed
やらlost
とかそういう文字列のとき、せめてハイライトしてあれば見つけやすい。
こうする。
ls | tail -3 | GREP_COLOR='01;31' grep --color -P "zen|"
# or
# ls | tail -3 | grep --color -P "zen|"
文字列zen
を赤色にハイライトする例。
肝は、zen|
の部分。zen
だけだとzen
が含まれていない列は出力がされなくなるのがgrepの仕様。こうしてやることでそれを防ぐ。
後述するが、zen|$
でもいいっぽい。(未検証)明示的にやるならこちらのやり方のほうが分かりやすそうではある。
Color specific words in Linux terminal whenever they appear – Stack Overflow
こういう方法もあるっぽい。ただegrepってのが詳しくないので検証はしてません。(察するにregex標準という感じだろうか。)
tail -f myfwlog | GREP_COLOR='01;36' egrep --color=always 'ssh|$' | GREP_COLOR='01;31' egrep -i --color=always 'drop|deny|$'
bash – Grep output with multiple Colors? – Stack Overflow
こちらも参考に。
egrep --color "\b(PASS|FAIL)\b|$"
How do you colorize only some keywords for a bash script? – Unix & Linux Stack Exchange
bashのカラーコードはこちらで分かります。
32は緑、31は赤、etc
bash:tip_colors_and_formatting – FLOZz’ MISC
aliasの例。なお、赤だとどっちの出力なのかわかりずらいのでカラーは36 Cyanとしている。
alias colorizeError="GREP_COLOR='01;36' grep --color -P 'deny|failure|failed|error|lost|'"