2017-12-10 8 views
1

ich einige Log-Ausgänge haben, die wie folgt aussieht:Regex Prune Logausgabe

<DEBUG> 01-Jan-1970::01:01:01.012 JavaClassName Lala-Worker-Thread-0: - This line contains information 
<DEBUG> 01-Jan-1970::01:01:01.012 JavaClassName Lala-Worker-Thread-0: - Result received: '[email protected]' 

würde Ich mag diese Ausgabe beschneiden

<DEBUG> - This line contains information 
<DEBUG> - Result received: '[email protected]' 

ich etwas gefunden habe, die Art aber funktioniert manchmal tut Dinge, die ich nicht will, so möchte ich „Qualitätsnachweis“ es ein bisschen:

$ sed -r 's/(<[A-Z]+>)(.*:)/\1/g' theLogFile 
<DEBUG> - This line contains information 
<DEBUG> '[email protected]' 

Wer weiß, was sonst meine regex ist in der Lage (in einer ba d Weg), also, was ist eine bessere Lösung? Das funktioniert besser, aber scheint Art von dumm, in einer Art und Weise den Strich in einer Gruppe angeben, dass „es entfernt“, und dann manuell hinzufügen zurück:

sed -r 's/(<[A-Z]+>)(.*: -)(.*)/\1 - \3/g' 

Wie auch immer, Beratung, anyone? Vielen Dank.

+1

ich wahrscheinlich etwas tun würde, wie 'perl -pe‚s/^ <[A-Z]+> \ K \ S + \ S + \ S +: // ''. – melpomene

+1

Sie müssen möglicherweise eine klarere Vorstellung davon haben, was Ihr Muster ist. Aus dem begrenzten Beispiel von Ihnen würde ich erraten, dass alle Debug-Zeilen die Informationen enthalten, die Sie nach dem ": -" wollen. Wenn ja, eine einfache '' 'Katze theLogFile | sed 's /.*: - // g'''' würde den Job machen. – MASL

+1

@MASL: Sie sollten die Angewohnheit zu pipe 'cat' zu sed/grep/awk/... verlieren alle diese Befehle haben einen" filename "-Parameter. –

Antwort

2

Einfache sed Ansatz:

sed -E 's/^(<[A-Z]+>).*:(- .*)/\1\2/' logfile 

Der Ausgang:

<DEBUG> - This line contains information 
<DEBUG> - Result received: '[email protected]' 
+0

Danke! Schön zu sehen, dass ich nicht weit weg war, haha ​​... Eine Sache, die ich nicht verstehe, ist, warum hört es beim "richtigen" Doppelpunkt (d. H. Dem letzten) auf, und nicht nach dem Jahr? Wenn der Motor '01-Jan-1970:' liest, hat er das Muster '. *:' Gefunden, warum hört es dort nicht auf? –

+1

@ErikVesterlund, willkommen, * warum hört es dort nicht auf? * - greedy '*' operator passt zu den meisten Zeichen bis zum letzten ':' char – RomanPerekhrest

0
$ sed -E 's/ ([^:]*:){5}//' file 
<DEBUG> - This line contains information 
<DEBUG> - Result received: '[email protected]' 
+1

Während diese Antwort richtig sein mag, würde einige Fragen diese Frage verbessern ein langer Lauf. –

+0

Nein. Äußerst triviale Antworten brauchen oder brauchen keine Erklärungen. –

Verwandte Themen