cadeia não correspondente. Por quê?

2

Estou procurando combinar qualquer string que contenha uma instrução [DEBUG] e que, eventualmente, tenha uma sequência ": " depois dela. Se houver várias sequências ": " seguindo, quero corresponder ao primeiro. A idéia é colorir a instrução [DEBUG] e o próximo ao primeiro ": " .

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 em:

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

Para isso, achei que a seguinte sequência de substituição de sed seria suficiente, mas não:

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

Eu perdi horas em torno disso, mas infelizmente não corresponde à string mostrada acima. Alguma pista sobre o porquê?

    
por devoured elysium 14.04.2017 / 16:28

1 resposta

2

Você está tentando combinar, para o grupo 2, qualquer coisa, exceto : até : , mas há dois pontos no tempo, então você não corresponde. Você pode tentar substituir o [^:] por . e, provavelmente, obter os mesmos resultados, a menos que tenha um : em algum outro lugar da linha, ele corresponderá até a última ocorrência dessa sequência.

Talvez um padrão melhor, no entanto, seja

sed -r 's/(\[DEBUG])( \[[[:digit:].: ]*] [^:]*: )(.*)/${RED}${DEFAULT}${RED}${DEFAULT}/'
    
por 14.04.2017 / 16:39

Tags