일부 로그 파일을 구문 분석하고 오류를 찾고 있습니다. 각 줄은 다음과 같습니다.
CreateOrder_hostname1.domain.com_201509291530_tee.log:2015-09-29 15:42:06,715:ERROR :Thread-26_CreateOrder: [1443555726715] Error description [system]: Method1
ScheduleOrder_hostname2.domain.com_201509291530_tee.log:2015-09-29 15:42:06,715:ERROR :Thread-26_ScheduleOrder: [1443555726715] Error description 2 [system]: Method2
ScheduleOrder_hostname2.domain.com_201509291530_tee.log:2015-09-29 15:42:06,715:ERROR :Thread-26_ScheduleOrder: [1443555726715] Error description 3 [system]: Method3
ShipOrder_hostname3.domain.com_201509291530_tee.log:2015-09-29 15:42:06,715:ERROR :Thread-26_ShipOrder: [1443555726715] Error description 4 [system]: Method4
이 줄을 어떻게 이렇게 읽을 수 있나요?
CreateOrder: 2015-09-29 15:42:06: Error description
ScheduleOrder: 2015-09-29 15:42:06: Error description 2
ScheduleOrder: 2015-09-29 15:42:06: Error description 3
ShipOrder: 2015-09-29 15:42:06: Error description 4
답변1
그리고 sed
:
sed 's/^\([^_]*\)_[^:]*:\([^,]*\)[^]]*\]\([^[]*\).*/\1: \2:\3/'
^\([^_]*\)
줄의 시작 부분과 일치합니다^
. 그런 다음 괄호 안의 부분이\(...\)
sed 내부 변수에 저장됩니다\1
.[^_]*
_
밑줄이 0번 이상 아닌 모든 문자와 일치합니다*
.
[^:]*
그 뒤에는 가 아닌 모든 문자가 옵니다:
.\([^,]*\)
다시 괄호 안에 넣고 날짜 이후의 모든 문자\2
까지 변수에 저장합니다.,
[^]]*\]
]
구문 분석은 오류가 발생할 때까지(오류 설명 전) 계속됩니다 .\([^[]*\)
그런 다음 모든 것을 다음 열린 대괄호[
와 일치시키고\3
.\1: \2:\3
\1
이제 모든 것을 형식화된 출력과\2
변수 값으로 대체하고\3
.
산출:
CreateOrder: 2015-09-29 15:42:06: Error description
ScheduleOrder: 2015-09-29 15:42:06: Error description 2
ScheduleOrder: 2015-09-29 15:42:06: Error description 3
ShipOrder: 2015-09-29 15:42:06: Error description 4
답변2
이것은 작동합니다:
$ perl -pe 's/^(.+?)_.+?:(.+?),.*?\](.+?)\[.*/$1: $2:$3/' file
CreateOrder: 2015-09-29 15:42:06: Error description
ScheduleOrder: 2015-09-29 15:42:06: Error description 2
ScheduleOrder: 2015-09-29 15:42:06: Error description 3
ShipOrder: 2015-09-29 15:42:06: Error description 4
설명하다
perl -pe
: "-p
주어진 스크립트를 적용한 후 각 줄을 인쇄한다는 의미입니다.-e
s/^(.+?)_.+?:(.+?),.*?\](.+?)\[.*/$1: $2:$3/
:Regex는 첫 번째_
( ).+?_
이전의 모든 항목을 찾아 로 저장합니다$1
. 그런 다음 첫 번째 쉼표( )까지의 모든 항목 과:
그 이후의 첫 번째 쉼표( )까지의.+?,
모든 항목을 로 저장합니다. 그런 다음 첫 번째 ( )$2
로 이동하여 이후의 모든 항목을 캡처합니다. 첫 번째 ( )까지는 3달러입니다. 마지막으로 줄 끝까지 모든 것을 일치시킵니다. 이 모두 로 대체됩니다 .]
.*?\]
[
.+?\[
$1: $2: $3
답변3
또 다른 방법은 꼭 필요한 패턴을 유지하는 대신 불필요한 패턴을 제거하는 것입니다.
sed 's/_[^:]*:/: /;s/,[^]]*\]/:/;s/\[.*//'
산출:
CreateOrder: 2015-09-29 15:42:06: Error description
ScheduleOrder: 2015-09-29 15:42:06: Error description 2
ScheduleOrder: 2015-09-29 15:42:06: Error description 3
ShipOrder: 2015-09-29 15:42:06: Error description 4
답변4
오류 설명에는 다음과 같은 내용만 나와 있으므로 찾고 있는 것이 무엇인지 말하기 어렵습니다.잘못된 설명. 이렇게 하면 해당 항목과 그 주변의 식별 콘텐츠가 보존됩니다.
sed 's/[_,][^:-]*:/ /g
' <<\IN
CreateOrder_hostname1.domain.com_201509291530_tee.log:2015-09-29 15:42:06,715:ERROR :Thread-26_CreateOrder: [1443555726715] Error description [system]: Method1
ScheduleOrder_hostname2.domain.com_201509291530_tee.log:2015-09-29 15:42:06,715:ERROR :Thread-26_ScheduleOrder: [1443555726715] Error description 2 [system]: Method2
ScheduleOrder_hostname2.domain.com_201509291530_tee.log:2015-09-29 15:42:06,715:ERROR :Thread-26_ScheduleOrder: [1443555726715] Error description 3 [system]: Method3
ShipOrder_hostname3.domain.com_201509291530_tee.log:2015-09-29 15:42:06,715:ERROR :Thread-26_ShipOrder: [1443555726715] Error description 4 [system]: Method4
IN
...인쇄...
CreateOrder 2015-09-29 15:42:06 ERROR :Thread-26 [1443555726715] Error description [system]: Method1
ScheduleOrder 2015-09-29 15:42:06 ERROR :Thread-26 [1443555726715] Error description 2 [system]: Method2
ScheduleOrder 2015-09-29 15:42:06 ERROR :Thread-26 [1443555726715] Error description 3 [system]: Method3
ShipOrder 2015-09-29 15:42:06 ERROR :Thread-26 [1443555726715] Error description 4 [system]: Method4
이것이 너무 많은 것인지 너무 적은 것인지, 아니면 올바른 방향으로 나아가고 있는지 모르겠습니다. 박스에 담긴 물건을 버리기도 했어요.
sed 's/[_,[][^]:-]*[]:]/ /g
' <<\IN
CreateOrder_hostname1.domain.com_201509291530_tee.log:2015-09-29 15:42:06,715:ERROR :Thread-26_CreateOrder: [1443555726715] Error description [system]: Method1
ScheduleOrder_hostname2.domain.com_201509291530_tee.log:2015-09-29 15:42:06,715:ERROR :Thread-26_ScheduleOrder: [1443555726715] Error description 2 [system]: Method2
ScheduleOrder_hostname2.domain.com_201509291530_tee.log:2015-09-29 15:42:06,715:ERROR :Thread-26_ScheduleOrder: [1443555726715] Error description 3 [system]: Method3
ShipOrder_hostname3.domain.com_201509291530_tee.log:2015-09-29 15:42:06,715:ERROR :Thread-26_ShipOrder: [1443555726715] Error description 4 [system]: Method4
IN
...인쇄...
CreateOrder 2015-09-29 15:42:06 ERROR :Thread-26 Error description : Method1
ScheduleOrder 2015-09-29 15:42:06 ERROR :Thread-26 Error description 2 : Method2
ScheduleOrder 2015-09-29 15:42:06 ERROR :Thread-26 Error description 3 : Method3
ShipOrder 2015-09-29 15:42:06 ERROR :Thread-26 Error description 4 : Method4
...아마도 보고 싶은 게 있는 것 같군요.
이건 떨어졌어요설명하다조금은 완전하지만, 여전히 같은 이야기를 하고 있을까요? 말씀하신 문자열을 일치시키기가 조금 어렵다는 점을 명심하세요무엇이든 될 수 있다이것도 실제 목적에 도움이 되지 않는 것 같습니다. 아무튼 그것도 재미있습니다.
sed 's/[_,][^-]*[^ ]:/ /g
' <<\IN
CreateOrder_hostname1.domain.com_201509291530_tee.log:2015-09-29 15:42:06,715:ERROR :Thread-26_CreateOrder: [1443555726715] Error description [system]: Method1
ScheduleOrder_hostname2.domain.com_201509291530_tee.log:2015-09-29 15:42:06,715:ERROR :Thread-26_ScheduleOrder: [1443555726715] Error description 2 [system]: Method2
ScheduleOrder_hostname2.domain.com_201509291530_tee.log:2015-09-29 15:42:06,715:ERROR :Thread-26_ScheduleOrder: [1443555726715] Error description 3 [system]: Method3
ShipOrder_hostname3.domain.com_201509291530_tee.log:2015-09-29 15:42:06,715:ERROR :Thread-26_ShipOrder: [1443555726715] Error description 4 [system]: Method4
IN
CreateOrder 2015-09-29 15:42:06 ERROR :Thread-26 Method1
ScheduleOrder 2015-09-29 15:42:06 ERROR :Thread-26 Method2
ScheduleOrder 2015-09-29 15:42:06 ERROR :Thread-26 Method3
ShipOrder 2015-09-29 15:42:06 ERROR :Thread-26 Method4