grep -o '[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}를 사용하여 IP 주소에 대한 로그 파일 줄을 구문 분석하려고 합니다. . [0-9]{1,3}'이며 주어진 각 행의 마지막 IP 주소만 추출하려고 합니다.
구문 분석할 두 줄의 예:
Via: SIP/2.0/UDP 78.41.207.101:5237;branch=z9hG4bK-577783956;rport=5237
Via: SIP/2.0/UDP 127.0.0.1:5079;branch=z9hG4bK-1014230957;rport=5079;received=194.126.22.146
나는 얻는다 :
78.41.207.101
127.0.0.1
194.126.22.146
내가 원하는 것:
78.41.207.101
194.126.22.146
귀하의 도움에 감사드립니다.
답변1
이 sed를 사용해 볼 수 있습니다
sed -E 's/.*[^0-9](([0-9]{1,3}\.){3}[0-9]{1,3}).*/\1/' infile
설명하다:
-E 확장 정규식을 사용합니다.
-E가 없으면 다음과 같이 명령을 작성해야 합니다.
sed 's/.*[^0-9]\(\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}\).*/\1/' infile
(([0-9]{1,3}.){3}[0-9]{1,3})는 RE와 동일합니다.
<-------> !
1 3 time
'[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}'
<---------><---------><--------->
1 2 3
첫 번째 부분 .*[^0-9] 은 탐욕적입니다.
줄의 마지막 정규식 앞의 모든 항목과 일치합니다.
마지막 .*는 줄의 끝과 일치합니다.
답변2
이 경우에는 awk를 사용하고 싶습니다.
$ awk '{print $NF}' FPAT="[0-9]{1,3}[.][0-9]{1,3}[.][0-9]{1,3}[.][0-9]{1,3}" file1
78.41.207.101
194.126.22.146
FPAT
필드를 정의하는 데 사용되는 구성(grep -o 모드와 동일)은
$NF
각 줄의 마지막 필드입니다.
답변3
대부분의 정규식 기계는 욕심 모드를 사용합니다. 즉, 최대한 일치합니다. 그래서 이와 같은 것이 ^.*[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+
일치 할 것입니다까지 포함마지막 IPv4 주소. 그것을 잡아.