ログを解析するために設計した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