Sed-String stimmt nicht überein. Warum?

Sed-String stimmt nicht überein. Warum?

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}/'

verwandte Informationen