色つきの tail -f とか grep とか

日々のサーバメンテでは tail -f で apacheアクセスログを監視したりするわけですが、「監視対象の文字列」を目視確認するにはやはり色分けした方が良いわけで、少し調べてみました。

Free Dynamic DNS(DDNS) by POP3,IMAP4,FTP,HTTP-BASIC for Home Server, VPS | MyDNS.JP さんにそのものズバリのやり方が載っていたのですが、

tail -f access_log | perl -pe 's/POST/\033\[1;36m$&\033\[0m/gi'

なんてとうてい覚えられませんw

ので、スクリプトにしてみました。

#!/usr/bin/perl
die "usage: $0 expr\n" if (@ARGV != 1);
# highlight color
#my $hc = "0;30"; # Black
#my $hc = "0;31"; # Red
#my $hc = "0;32"; # Green
#my $hc = "0;33"; # Brown
#my $hc = "0;34"; # Blue
#my $hc = "0;35"; # Purple
#my $hc = "0;36"; # Cyan
#my $hc = "0;37"; # LightGray
#my $hc = "1;30"; # DarkGray
#my $hc = "1;31"; # LightRed
#my $hc = "1;32"; # LightGreen
#my $hc = "1;33"; # Yellow
#my $hc = "1;34"; # LightBlue
#my $hc = "1;35"; # LightPurple
my $hc = "1;36"; # LightCyan
#my $hc = "1;37"; # White
while (<STDIN>) {
  s/$ARGV[0]/\e[${hc}m$&\e[0m/g;
  print;
}

これを /usr/local/bin/colorsed や ~/bin/colorsed に保存して、

tail -f /var/log/httpd/access_log | colorsed "takke.jp"

なんてすると、指定した文字列が$hcで指定した色で表示されます。実行権を忘れずに。

perl正規表現が使えるので、

tail -f /var/log/httpd/access_log | colorsed "^.*?\.jp"

とするとjpドメインからのアクセスを色づけできるわけですね。

ちなみにgrepだとgrep --colorで良いようです。

alias grep='grep --color'

はオススメ。