スポンサーリンク
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)
新しいコメントを投稿
|HOME|
『【MySQL】SELECTの結果をCSVファイルに出力してExcelで編集したい』 OLD >>
スポンサーリンク