Строка sed не совпадает. Почему?

Строка sed не совпадает. Почему?

Я ищу соответствие любой строке, содержащей [DEBUG]оператор, за которым в конечном итоге последует ": "строка. Если за ней следует несколько ": "строк, я хочу сопоставить первую. Идея состоит в том, чтобы затем раскрасить как оператор [DEBUG], так и то, что следует за первым ": ".

Примером может служить:

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

следует перевести на:

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

Я думал, что для этого будет достаточно следующей строки замены sed, но это не так:

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

Я потерял часы на это, но, к сожалению, это не соответствует показанной выше строке. Есть какие-нибудь подсказки, почему?

решение1

Вы пытаетесь сопоставить, для группы 2, что угодно, кроме a :до a :, но в time есть двоеточия, поэтому совпадение не происходит. Вы можете попробовать заменить на [^:]и ., скорее всего, получите те же результаты, если только у вас нет a :где-то еще в строке, тогда совпадение будет до последнего вхождения этой строки.

Возможно, лучшая модель, однако, это

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

Связанный контент