我希望匹配包含語句的任何字串,並且最終後面[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之外的任何內容:
,但時間中有冒號,因此您不匹配。您可以嘗試將 替換[^:]
為.
,並且可能會得到相同的結果,除非該行中的其他位置有 a :
,否則它將匹配直到該字串最後一次出現。
不過,也許更好的模式是
sed -r 's/(\[DEBUG])( \[[[:digit:].: ]*] [^:]*: )(.*)/${RED}\1${DEFAULT}\2${RED}\3${DEFAULT}/'