Ich möchte eine "grep"- oder "pcregrep -M"-ähnliche Lösung verwenden können, die eine Protokolldatei analysiert, die den folgenden Parametern entspricht:
- Jeder Protokolleintrag kann mehrere Zeilen lang sein
- Die erste Zeile des Protokolleintrags enthält den Schlüssel, nach dem ich suchen möchte
- Jede Taste erscheint auf mehr als einer Zeile
Im folgenden Beispiel würde ich also jede Zeile mit KEY1 und alle darunter liegenden Zeilen bis zur nächsten Protokollmeldung zurückgeben wollen.
Log file:
01 Feb 2010 - 10:39:01.755, DEBUG - KEY1:randomtext
blah
blah2 T
blah3 T
blah4 F
blah5 F
blah6
blah7
01 Feb 2010 - 10:39:01.757, DEBUG - KEY1:somethngelse
01 Feb 2010 - 10:39:01.758, DEBUG - KEY2:randomtest
this is a test
01 Feb 2010 - 10:39:01.760, DEBUG - KEY1:more logs here
01 Feb 2010 - 10:39:01.762, DEBUG - KEY1:eve more here
this is another multiline log entry
keeps on going
but not as long as before
01 Feb 2010 - 10:39:01.763, DEBUG - KEY2:testing
test test test
end of key2
01 Feb 2010 - 10:39:01.762, DEBUG - KEY1:but key 1 is still going
and going
and going
and going
and going
and going
and going
and going
and going
and going
and going
and going
and going
okay enough
01 Feb 2010 - 10:39:01.762, DEBUG - KEY3:and so on
and on
Desired output of searching for KEY1:
01 Feb 2010 - 10:39:01.755, DEBUG - KEY1:randomtext
blah
blah2 T
blah3 T
blah4 F
blah5 F
blah6
blah7
01 Feb 2010 - 10:39:01.757, DEBUG - KEY1:somethngelse
01 Feb 2010 - 10:39:01.760, DEBUG - KEY1:more logs here
01 Feb 2010 - 10:39:01.762, DEBUG - KEY1:eve more here
this is another multiline log entry
keeps on going
but not as long as before
01 Feb 2010 - 10:39:01.762, DEBUG - KEY1:but key 1 is still going
and going
and going
and going
and going
and going
and going
and going
and going
and going
and going
and going
and going
okay enough
Ich habe versucht, etwas zu tun wie:
pcregrep -M 'KEY1(.* \n )+' Logdatei
aber es funktioniert definitiv nicht richtig.