Ich möchte alle Zeichenfolgen abgleichen, die eine [DEBUG]
Anweisung enthalten und denen eventuell eine ": "
Zeichenfolge folgt. Wenn mehrere ": "
Zeichenfolgen folgen, möchte ich die erste abgleichen. Die Idee besteht darin, dann sowohl die [DEBUG]
Anweisung als auch das, was neben der ersten steht, einzufärben ": "
.
Ein Beispiel wäre:
[thread1] [DEBUG] [2017.03.12 23:22:12] com.abc.def.Xyz: some log message: some more specific info.
sollte übersetzt werden in:
[thread1] ${RED}[DEBUG]${DEFAULT} [2017.03.12 23:22:12] com.abc.def.Xyz: ${RED}some log message.${DEFAULT}
Ich dachte, dafür würde der folgende sed-Ersetzungsstring ausreichen, aber das tut er nicht:
sed -r "s/(\[DEBUG\])([^:]*: )(.*)$/${RED}\1${DEFAULT}\2${RED}\3{$DEFAULT}/"
Ich habe Stunden damit verbracht, aber leider stimmt es nicht mit der oben angezeigten Zeichenfolge überein. Irgendwelche Hinweise, warum?
Antwort1
Sie versuchen, für Gruppe 2 alles außer a :
bis a abzugleichen :
, aber die Zeit enthält Doppelpunkte, sodass Sie keine Übereinstimmung finden. Sie können versuchen, das [^:]
durch zu ersetzen .
und erhalten wahrscheinlich die gleichen Ergebnisse, es sei denn, Sie haben :
irgendwo anders in der Zeile ein , dann wird es bis zum letzten Vorkommen dieser Zeichenfolge übereinstimmen.
Ein besseres Muster wäre jedoch vielleicht
sed -r 's/(\[DEBUG])( \[[[:digit:].: ]*] [^:]*: )(.*)/${RED}\1${DEFAULT}\2${RED}\3${DEFAULT}/'