Bashのパイプから受け取ったテキストで複数の単語をハイライト表示させる

cattail -f からパイプで受け取ったテキストから複数の単語を色違いにハイライト表示させたい場合に利用します。

grepのハイライト機能( grep --color=auto )だと検索ひっかかった行のみしか表示されないということで作ってみました。

スクリプト

function highlight_multi() {
  words=("$@")
  c_off=$'\e[0m'
  while read line
  do
    color_num=31
    text=${line}
    for word in ${words[@]}
    do 
      color_num=$((color_num+1))
      c_on=$(echo -e "\e[1;${color_num}m")
      text=$(echo -e ${text} | sed -u "s/${word}/${c_on}\0${c_off}/g")
    done
    echo -e ${text}
  done
}

使い方

上記のスクリプトをターミナルでコピペ。またはシェル化。

こんな感じで使います。

tail -f /var/log/httpd/access_log | highlight_multi Mac 500 Chrome
cat /path/to/something.txt | highlight_multi Mac 500 Chrome

f:id:yomon8:20170127153453p:plain 細かい制御はできませんがさっと使いたい場合に。他にも良い方法あれば知りたい・・

参考URL

dev-shell-essentials/highlight.sh at master · kepkin/dev-shell-essentials · GitHub

Linuxでファイル・標準出力の特定のキーワードだけハイライト表示させる | 俺的備忘録 〜なんかいろいろ〜