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

https://yuis.xsrv.jp/images/ss/ShareX_ScreenShot_4c5343dd-f4e2-4630-884c-1c320a4e32b9.png

こういう方法もあるっぽい。ただ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|'"



お困りですか?この記事で紹介していることをマンツーマンで指導、解説、代行します。まずはお気軽にお問い合わせください。


Close Menu