Tente algo assim:
cat importantstuff.log | grep 'File .*, line .*, in .*' -B 1 -A 2
Não responde exatamente a pergunta, mas acho que ela realiza a tarefa.
Os sinalizadores -A
e -B
para linhas de contexto de controle do grep após ou antes de sua correspondência.
Isso funciona porque o grep agrupa correspondências adjacentes, então você acaba com tracebacks bem separados:
Traceback (most recent call last):
File "sfquest.py", line 9, in b
c()
File "sfquest.py", line 15, in c
d()
File "sfquest.py", line 20, in d
raise Exception('important information')
Exception: important information
--
Traceback (most recent call last):
File "sfquest.py", line 9, in b
c()
File "sfquest.py", line 15, in c
d()
File "sfquest.py", line 20, in d
raise Exception('important information')
Exception: important information
--
Traceback (most recent call last):
File "sfquest.py", line 9, in b
c()
File "sfquest.py", line 15, in c
d()
File "sfquest.py", line 20, in d
raise Exception('important information')
Exception: important information
Aqui está o código de exemplo que usei para gerar o exemplo do traceback:
import traceback
def a():
b()
def b():
for i in range(10):
try:
c()
except Exception, e:
print 'bad stuff'
print traceback.format_exc(e)
def c():
d()
def d():
for i in range(10):
print 'random junk'
raise Exception('important information')
a()