Я ищу соответствие любой строке, содержащей [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}/'