Estou procurando corresponder a qualquer string que contenha uma [DEBUG]
instrução e que eventualmente terá uma ": "
string a seguir. Se houver várias ": "
strings seguindo-o, quero combinar o primeiro. A ideia é então colorir tanto a [DEBUG]
declaração quanto o que está próximo à primeira ": "
.
Um exemplo seria:
[thread1] [DEBUG] [2017.03.12 23:22:12] com.abc.def.Xyz: some log message: some more specific info.
deve ser traduzido para:
[thread1] ${RED}[DEBUG]${DEFAULT} [2017.03.12 23:22:12] com.abc.def.Xyz: ${RED}some log message.${DEFAULT}
Para isso, pensei que a seguinte string sed replace seria suficiente, mas não é:
sed -r "s/(\[DEBUG\])([^:]*: )(.*)$/${RED}\1${DEFAULT}\2${RED}\3{$DEFAULT}/"
Perdi horas com isso, mas infelizmente não corresponde à string mostrada acima. Alguma pista sobre o porquê?
Responder1
Você está tentando combinar, para o grupo 2, qualquer coisa, exceto a :
até a :
, mas há dois pontos no horário, então você não corresponde. Você pode tentar substituir [^:]
por .
e provavelmente obter os mesmos resultados, a menos que tenha :
algum outro lugar na linha, então ele corresponderá até a última ocorrência dessa string.
Talvez um padrão melhor, porém, seja
sed -r 's/(\[DEBUG])( \[[[:digit:].: ]*] [^:]*: )(.*)/${RED}\1${DEFAULT}\2${RED}\3${DEFAULT}/'