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 를 제외한 모든 항목을 일치시키려고 :하지만 시간에 콜론이 있으므로 일치하지 않습니다. 줄에 다른 부분이 없으면 해당 문자열이 마지막으로 나타날 때까지 일치할 [^:].입니다 .:

아마도 더 나은 패턴은 다음과 같습니다.

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

관련 정보