- Published on
Bashコマンドで標準出力の文字列を色付けする
- Authors
- Name
- Shou Arisaka / 有坂翔
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|$
でもいいっぽい。(未検証)明示的にやるならこちらのやり方のほうが分かりやすそうではある。
こういう方法もあるっぽい。ただegrepってのが詳しくないので検証はしてません。(察するにregex標準という感じだろうか。)
tail -f myfwlog | GREP_COLOR='01;36' egrep --color=always 'ssh|$' | GREP_COLOR='01;31' egrep -i --color=always 'drop|deny|$'
こちらも参考に。
egrep --color "\b(PASS|FAIL)\b|$"
bashのカラーコードはこちらで分かります。 32は緑、31は赤、etc
bash:tip_colors_and_formatting - FLOZz' MISCaliasの例。なお、赤だとどっちの出力なのかわかりずらいのでカラーは36 Cyanとしている。
alias colorizeError="GREP_COLOR='01;36' grep --color -P 'deny|failure|failed|error|lost|'"