grep -Po '\S+(?==)'
要 GNU grep。(?==)
は肯定先読み(lookahead)。=
を結果から除外するため。
$ cat log.txt 2010-09-16T15:13:46.723498+00:00 heroku[router]: at=info method=GET path="/posts" host=myapp.herokuapp.com" fwd="204.204.204.204" dyno=web.1 connect=1ms service=18ms status=200 bytes=975 $ cat log.txt | grep -Po '\S+(?==)' at method path host fwd dyno connect service status bytes
もっと key value ペアが大量にあって一行が長いログの場合に、そのままだと見づらくてどんなキーがあるか把握するのが大変。キーの一覧だけパッと見ると当たりをつけやすい。