La cadena sed no coincide. ¿Por qué?

La cadena sed no coincide. ¿Por qué?

Estoy buscando hacer coincidir cualquier cadena que contenga una [DEBUG]declaración y que eventualmente tendrá una ": "cadena a continuación. Si hay varias ": "cadenas a continuación, quiero hacer coincidir la primera. La idea es luego colorear tanto la [DEBUG]declaración como lo que está al lado de la primera ": ".

Un ejemplo sería:

  [thread1] [DEBUG] [2017.03.12 23:22:12] com.abc.def.Xyz: some log message: some more specific info.

debe traducirse a:

  [thread1] ${RED}[DEBUG]${DEFAULT} [2017.03.12 23:22:12] com.abc.def.Xyz: ${RED}some log message.${DEFAULT}

Para eso, pensé que la siguiente cadena de reemplazo sed sería suficiente, pero no es así:

sed -r "s/(\[DEBUG\])([^:]*: )(.*)$/${RED}\1${DEFAULT}\2${RED}\3{$DEFAULT}/"

He perdido horas con esto, pero desafortunadamente no coincide con la cadena que se muestra arriba. ¿Alguna pista sobre por qué?

Respuesta1

Está intentando hacer coincidir, para el grupo 2, cualquier cosa excepto a :hasta a :, pero hay dos puntos en el tiempo, por lo que no coincide. Puede intentar reemplazar [^:]con .y probablemente obtenga los mismos resultados, a menos que tenga un :otro lugar en la línea, entonces coincidirá hasta la última aparición de esa cadena.

Quizás un patrón mejor, sin embargo, sea

sed -r 's/(\[DEBUG])( \[[[:digit:].: ]*] [^:]*: )(.*)/${RED}\1${DEFAULT}\2${RED}\3${DEFAULT}/'

información relacionada