TAB で始まる複数行とグループの最初の行の前の行を一致させるにはどうすればよいですか?

TAB で始まる複数行とグループの最初の行の前の行を一致させるにはどうすればよいですか?

いくつかのサードパーティのログファイルがあり、コマンドラインからエラーを抽出しようとしています。

ログは次のとおりです。

time=1
time=2
time=3
  at com.test.com....
  at com.test.com....
  at com.test2.com....
time=4
time=5
time=6
time=7
time=8
time=9
  at org.badstuff.com...
  at org.badstuff.com...
  at org.badstuff.com...
time=10
time=11

で始まる行はatTAB文字で始まるので、簡単に一致させることができます。

このファイルからこれらのスタックトレースをどのように抽出できますか?そして毎回最初のスタックトレースの前に何行ありますか?私はMacを使用していますが、可能であればMac / Linuxで動作する汎用ソリューションを好みます。両方とも頻繁に作業する必要があるからです。

上記の例では、次のようになります。

time=2
time=3
  at com.test.com....
  at com.test.com....
  at com.test2.com....
time=8
time=9
  at org.badstuff.com...
  at org.badstuff.com...
  at org.badstuff.com...

答え1

たとえば、-Aafterコンテキスト、-Beforeコンテキスト、または-Cコンテキストオプションを使用します。grep

grep -B2 '^\t' file

答え2

grep -B2 -P '^\t' logfile各ゲームセットの前に2行を選択するために使用されます。一致の間に挿入されたグループ区切り文字「--」を隠す必要があるかもしれません。

結果

$ grep -B2 -P '^\t' /tmp/t
time=2
time=3
        at com.test.com....
        at com.test.com....
        at com.test2.com....
--
time=8
time=9
        at org.badstuff.com...
        at org.badstuff.com...
        at org.badstuff.com...

関連情報