シェルワンライナー #9

問題

apacheのログを決まった期間抜き出す問題

回答

 cat log_range.log | sed -n '/24\/Dec\/2016 21:..:../,/25\/Dec\/2016 03:..:../p'

sed -n '/hoge/,/piyo/p' について

sed コマンドは、Unixオペレーティングシステムで使われるストリームエディタで、テキストファイルの編集や処理を行うのに役立ちます。sed は、テキストファイルを1行ずつ読み込んで、指定されたパターンやコマンドに従って処理し、結果を標準出力に出力します。

この場合の sed -n '/2/,/4/p' コマンドは、以下のように動作します。

  • -n オプションは、sed に対して、自動的な出力を抑制するよう指示します。これにより、明示的に p コマンド(後述)で指定された行だけが出力されるようになります。
  • '/2/,/4/' は、範囲を指定しています。この範囲は、/2/ で始まり、/4/ で終わります。ここで、/2/ は「2 を含む行」にマッチし、/4/ は「4 を含む行」にマッチします。したがって、この範囲は、2 を含む行から始まり、4 を含む行で終わるすべての行になります。
  • p コマンドは、現在の行を印刷(出力)するよう指示します。この場合、範囲内の行が対象となります。

このコマンドが適用されると、テキストファイルの中で2を含む行から始まり、4を含む行で終わる範囲の行が出力されます。範囲外の行は出力されません。

思ったこと

  • しらない方法だったので、さっさと答え見て正解。
  • sedは置換するだけだと思ってたら、正規表現で範囲指定して抽出みたいなことができるんだなぁ