シェルワンライナー #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を含む行で終わる範囲の行が出力されます。範囲外の行は出力されません。