파일의 특정 줄에서 패턴을 grep하고 같은 줄에서 일치하는 항목이 발견되면 해당 줄을 출력합니다.

파일의 특정 줄에서 패턴을 grep하고 같은 줄에서 일치하는 항목이 발견되면 해당 줄을 출력합니다.

다음 내용을 포함하는 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

관련 정보