로그에서 패턴 검색

로그에서 패턴 검색

로그의 형식은 다음과 같습니다.

Junk Junk Junk : Junk Junk Junk:IP/Port Junk Junk

를 사용하여 검색하고 싶습니다 IP. 출력은 IP/Port해당 로그 파일의 각 줄의 일부여야 합니다.

나는 가능한 모든 조합과 내가 아는 모든 것을 시도했습니다 grep: D cut이것이 가능합니까? 아니면 일부 로그 구문 분석 도구를 계속 사용해야 합니까?awkbash

편집하다:형식이 완전히 동일하지 않으며 위치가 Junk:IP/Port변경되어 사용이 불가능할 수도 있으니 주의하시기 바랍니다awk '{print $7}'

고쳐 쓰다:샘플 로그 추가

DATE NAME-FIREWALL : %RULE-NUM: Teardown TCP connection PKT-NUM for LAN1:X.X.X.X/XX to LAN2:X.X.X.X/XX duration 0:0:0 bytes XXXX TCP FINs
DATE NAME-FIREWALL : %RULE-NUM: Built inbound TCP connection PKT-NUM for LAN1:X.X.X.X/XX (X.X.X.X/XX) to LAN2:X.X.X.X/XX (X.X.X.X/XX)

LAN2 옆에 있는 IP/포트 부분을 검색해서 가져와야 합니다.

답변1

무엇에 대해

awk '{for(i=1;i<=NF;i++) if ( $i ~ /[^:]*:/ ) { n=split($i,A,":"); if (length(A[2]) && n==2) print A[2] ; }} ' b.txt
X.X.X.X/XX
X.X.X.X/XX
X.X.X.X/XX
X.X.X.X/XX

편집: (LAN 사용)

awk '{for(i=1;i<=NF;i++) if ( $i ~ /[^:]*:/ ) { n=split($i,A,":"); if (length(A[2]) && n==2) printf "%s -- %s\n",A[1], A[2] ; }} ' b.txt
LAN1 -- X.X.X.X/XX
LAN2 -- X.X.X.X/XX
LAN1 -- X.X.X.X/XX
LAN2 -- X.X.X.X/XX

답변2

이 시도:

grep -Po 'LAN2:\K(\d{1,3}.){3}\d{1,3}/\d*' file

이는 블록을 찾아 PATTERN:ipdigits.ipdigits.ipdigits.ipdigits/digits해당 ipdigits.ipdigits.ipdigits.ipdigits/digits부분을 인쇄합니다( \K"깨끗한" 일치). 이는 ipdigits1~3개의 문자를 포함해야 함을 의미합니다. 더 많은 필터를 적용할 수 있습니다(1~255와 일치).

시험

$ cat a
Junk Junk Junk : Junk Junk LAN2:123.123.2.2/56 Junk Junk
Junk Junk Junk : Junk Junk LAN3:22.33.44.55/22 Junk Junk
$ grep -Po 'LAN2:\K(\d{1,3}.){3}\d{1,3}/\d*' a
123.123.2.2/56

관련 정보