다음 내용을 포함하는 temp.log라는 파일이 있습니다.
blahblah SomeOtherClassName blahblahblah
blahblah MyClassName blah blah blah userId:[6729223726254951za],key:[09809890980980908d0e6],token:[0238234234-3948-4d9],SessionScope:[0238234234-3948-4d9],PageScope:[0238234234-3948-4d9],RequestScope:[0238234234-3948-4d9], requestUrl:/blah/blah/blah
blahblah SomeOtherClassName blahblahblah
blahblah MyClassName blah blah blah userId:[6729223726254951za],key:[09809890980980908d0e6],token:[0238234234-3948-4d9],SessionScope:[1111111-3948-4d9],PageScope:[0238234234-3948-4d9],RequestScope:[0238234234-3948-4d9], requestUrl:/blah/blah/blah
MyClassName이 포함된 로그 줄과 sessionscope, pagescope 또는 requestscope 값 중 하나가 토큰 값과 일치하지 않는 경우 로그 파일을 구문 분석하여 출력하고 싶습니다. 예를 들어 내 예에서는 2행과 4행에 MyClassName이 있고, 이 두 행 중 4행에는 토큰과 다른 SessionScope 값이 있으므로 4행이 출력되어야 합니다. grep 및 역참조 옵션 때문에 어려움을 겪고 있습니다.
답변1
토큰을 그룹으로 캡처하고 역참조를 사용하여 테스트합니다.
$ grep 'MyClassName' log |
grep -vE 'token:(\[[[:xdigit:]-]+\]),SessionScope:\1,PageScope:\1,RequestScope:\1'
blahblah MyClassName blah blah blah userId:[6729223726254951za],key:[09809890980980908d0e6],token:[0238234234-3948-4d9],SessionScope:[1111111-3948-4d9],PageScope:[0238234234-3948-4d9],RequestScope:[0238234234-3948-4d9], requestUrl:/blah/blah/blah
답변2
멍하니해결책:
awk -v FPAT='\\[[^][[:space:]]+\\]' 'NF>5 && ($3!=$4 || $3!=$5 || $3!=$6){ print $0 }' logfile
산출:
blahblah MyClassName blah blah blah userId:[6729223726254951za],key:[09809890980980908d0e6],token:[0238234234-3948-4d9],SessionScope:[1111111-3948-4d9],PageScope:[0238234234-3948-4d9],RequestScope:[0238234234-3948-4d9], requestUrl:/blah/blah/blah
세부 사항:
-v FPAT='\\[[^][[:space:]]+\\]'
- 필드 값에 대한 패턴 정의(예[0238234234-3948-4d9]
: )($3!=$4 || $3!=$5 || $3!=$6)
- 결정적인 내용이 있는 경우열쇠불일치토큰$3
값