2016-04-11 27 views
-3

Ich habe eine Zeichenfolge in einem Protokoll, das ich gerne Tokenize. Die Felder werden manchmal durch das '|' Zeichen und manchmal durch Leerzeichen.Tokenize regulären Ausdruck

es sieht immer so aus: timestamp | log_level | kategorie | message_body

oder

Zeitstempel log_level message_body

Beispiel:

2016/04/11 07:05:33 | INFO  | xxc  | message_message_abcde 

Oder

2016-04-11 07:01:24,895 INFO message message abcde 

Ich möchte alle duplizierten Nachrichten entfernen (Zeitstempel ignorieren). Da ich zuerst durch log_level = grep werde kann ich auch log_level ignorieren.

danke!

Antwort

0

Versuchen Sie, diese

\d{4}\/\d{2}\/\d{2}\s\d{2}:\d{2}:\d{2}\s*(\|[^|]+\|[^|]+\|\N+)(*SKIP)\n(?=(?:\N*\n)*?\d{4}\/\d{2}\/\d{2}\s\d{2}:\d{2}:\d{2}\s*\1) 

Eingang:

2016/04/11 07:05:33 | INFO  | xxc  | message_1 
2016/04/12 07:05:33 | INFO  | xxc  | message_2 
2016/04/13 07:05:33 | INFO  | xxc  | message_2 
2016/04/14 07:05:33 | INFO  | xxc  | message_3 
2016/04/15 07:05:33 | INFO  | xxc  | message_1 

Ausgang:

2016/04/13 07:05:33 | INFO  | xxc  | message_2 
2016/04/14 07:05:33 | INFO  | xxc  | message_3 
2016/04/15 07:05:33 | INFO  | xxc  | message_1