web-dev-qa-db-ja.com

特定の文字または文字列までgrepする方法

テラバイト相当のログファイルからログデータを抽出する必要があります。重要なのは、必要なデータは識別できるパターンで開始および終了しますが、その間のコードは10〜100行以上の範囲で指定できます。

例:

Start
# lots of lines here
End

現在、私がしているのはgrep -A 50 "Start"、これで開始とその後の50行が表示されます。しかし、ほとんどすべての場合、それは私が必要とするよりも多かれ少なかれです。結果のレポートファイルが必要以上にギガバイト大きくなることを意味し、必要な情報が得られないことを意味します。

標準のUnix/Linuxツールを使用して、必要なものを正確に抽出する方法はありますか?

2

Awkで試してみてください:

awk '/^Start/,/^End/' file

またはsedを好む場合:

sed -n '/Start/,/End/p' file
4
Simon