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

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

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

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

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)

新しいコメントを投稿




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

    ブログが趣味で、スマホアプリの利用中に発生するトラブルや不具合の対策手順や障害情報、 設定の変更方法などについて、解説記事をよく書いています。

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

    最近の関心は、スマホやパソコンが苦手な人の行動や思考、そしてそんな人を手助けする方法です。

    Amazonのアソシエイトとして、did2は適格販売により収入を得ています。

    RSS | Facebook | Twitter | About