Perlを使用したログの解析

Perlを使用したログの解析

ログを解析するために設計したPerlコマンドを使用したいと思います。これまで私が達成しようとしているのは、特定のタイムスタンプ形式を抽出してホストを検索することです。ログは次のとおりです

2016-05-07T09:07:04.933343+00:00 heroku[router]: status=301 bytes=680 service=2698ms connect=1ms dyno=web.2 fwd="10.29.10.29" at=info host="jamaican.com" request_id=32fc8d88-99f8-4cc2-89f9-284d059eebf8 method=GET path="/blog"

私のコマンドは目的の日付形式を解析できますが、出力にホストを追加する方法がわからないようです。どんな提案でもいいでしょう!

cat test.log  |
perl -lne 'print $1 if  /^([0-9]+[-]+[0-9]+[0-9]+[-]+[0-9]+[0-9]+[T]+[0-9]+[0-9]+[:]+[0-9]+[0-9]+[:]+[0-9]+[0-9])/'

ベストアンサー1

この試み:

perl -nle'($time, $host) = /^(\S+)\s(?:\S+\s+){8}\S+="(\S+?)"/; print "$time $host"'

出力:

2016-05-07T09:07:04.933343+00:00 jamaican.com
  • \S非空間を表す
  • \sスペースです
  • (?:)キャッチされていない論理的なグループ化です。
  • {8}スキップした「単語」です。
  • \S+="(\S+?)"=意味:2つの引用符の間にある内容までスキップしてキャプチャします。"
  • ($time, $host) = /.../キャプチャされた2つのグループ$time$host

おすすめ記事