syslogストリームの「tail -f」からフィールドを抽出する

syslogストリームの「tail -f」からフィールドを抽出する
Example line from syslog file:
Aug  1 10:25:50 10.10.10.1 id=firewall sn=XXXX time="2012-08-01 14:35:18 UTC" fw=x.x.x.x pri=6 c=1024 m=537 msg="Connection Closed" f=11 n=195273698 src=x.x.x.x:60246:X3: dst=x.x.x.x:443:X6:host.domain.com proto=tcp/https sent=181793 rcvd=649678

一つ作りたい

$ tail -f /var/log/log.log | SOMETHING

それが戻ってきます。

"src=x.x.x.x dst=x.x.x.x"

簡単に言えば、テキストから特定のフィールドを抽出できるようにしたいです。このファイルが生成されたシステムによっては、項目の順序が若干変更されて機能しない可能性があるため、フィールド番号(行の位置)に基づいてフィールドを選択したくありません。

私は提案に開いていますが、むしろ気の利いたことを言いたいと思います。

ベストアンサー1

tail -f log | perl -e 'while (<>) { print "src=$1 dst=$2\n" if $_ =~ /src=([^\s]+) dst=([^\s]+)/; }'

おすすめ記事