いくつかのサードパーティのログファイルがあり、コマンドラインからエラーを抽出しようとしています。
ログは次のとおりです。
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
で始まる行はat
TAB文字で始まるので、簡単に一致させることができます。
このファイルからこれらのスタックトレースをどのように抽出できますか?そして毎回最初のスタックトレースの前に何行ありますか?私は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
たとえば、-A
afterコンテキスト、-B
eforeコンテキスト、または-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...