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}/'

관련 정보