情報科学屋さんを目指す人のメモ

方法・手順・解説を書き残すブログ。私と同じことを繰り返さずに済むように。

「tail -f」の出力の一部に色を付けて見やすくする

awk (1) Linux (27) tail (1) Ubuntu (25) Ubuntu 16.04 (6)

Nginxのアクセスログのフォーマットを変更しながら出力を確認していて、「tail -f(tail -F)」を使っていたのですが、「出力に色を付けたいなぁ」と思い、tail -fに色を付ける方法を調べてみました。perl/rubyを使う方法が出てきたり、ちゃんと動かない・そうじゃない出力になるawk/sedを使う方法が出てきたりで、自分にあう方法がなかなか出てきてくれなかったので、結局使ったコマンドをメモしておきます。

tail -f の出力に色が付けたい

今回やりたかったのは、tail -fで動作確認していたログの一部(特定の単語)、該当する部分に色を付ける、ということです。

調べてみると

特定の単語に色を付けたいというシンプルなものだったので、perl/rubyはやり過ぎ感があり(今思うとインストールされていない状況を除けばそうでもない)、別コマンドをインストールするというのも長い目ではいいかもと思いつつ面倒で、ちょうどよさそうなパイプでawk/sedに渡す方法もちゃんと動かない(行全体を色塗っちゃったり、該当単語が含まれない行が出力されなかったり)ものや、塗りたいキーワードを2カ所に書いたりなどでイメージと違うものに次々遭遇しました。もしかすると、あまり大きな需要がないのかもしれません。

使ったコマンド

awkの勉強になるもはや無関係な試行錯誤をしつつ、結局sedを使ってシンプルに、tail -fの出力結果に含まれる「from_cache」というワードを緑色に塗ってみました。

tail -F /path/to/access.log | sed -E 's/(from_cache)/\o033[32m\1\o033[39m/g'

意味

tail -Fで出力したログをパイプでsedに渡して、from_cacheというワードをすべて(/g)、「\o033[32m\1\o033[39m」に置換しています。

「\1」は、正規表現パターンでマッチさせた最初のグループ(=ここでは「from_cache」)が代入される変数なので、実質from_cacheの前後に「\o033[32m」と「\o033[39m」を挿入している置換となります。

覚えるのがややこしい「\o033[32m」と「\o033[39m」ですが、まず「\o033」は、この5文字でESCコードを表しており「\o」が8進数を意味するので、8進数で33がESCコード、というわけです(16進数なら\x1bでもよい)。

そして、「ESC[32m」が「ここから文字色を緑」、「ESC[39m」が「ここから文字色を標準に戻す」という意味で、ちょうど「from_cache」の直線から直後までの文字色が緑色、になるわけです。

下線も引いた

結局次のようにして下線も引いて見やすくしました。

tail -F /path/to/access.log | sed -E 's/(from_cache)/\o033[32m\o033[4m\1\o033[0m\o033[39m/g'

参考

コメント(0)

新しいコメントを投稿




  • カテゴリ ナビ
  • 著者紹介

    ブログが趣味で、 月間1,000万PV を達成しました。

    自分が困ったことをブログに書けば、次に困る人の参考になって、みんながみんな同じ苦労をせずに済む、というのが原点です。

    最近の関心は、スマホやパソコンに詳しくない人の行動や思考、 そしてそんな人を手助けする方法や枠組み。 また、それに関連するような、"身近な"セキュリティ。

    ※SNS(特にTwitter)でシェアされた記事は、内容の追加・更新を行っています。 必ず、ではありませんが、気に入った記事は積極的にシェアしてみてください。

    RSS | Facebook | Twitter | About