grep -o 문제

grep -o 문제

아래와 같은 텍스트 파일이 있습니다.

    192.168.10.1
   192.168.45.45
    192.168.255.255
    192.168.0.5
    Random text comes here   8.8.8.8
    224.23.25.12
    225.1.2.3
    226.0.0.0
    227.1.2.6
    227.25.25.26
    228.145.123.45
    229.255.255.255

Random text come here 172.32.255.255
231.25.12.12
232.45.13.45
238.0.0.0
233.1.2.3
234.255.255.255
236.123.123.123
237.153.125.155
235.235.235.255
239.239.239.10
172.21.255.255
172.31.10.10
172.16.32.21
Random text comes here 206.32.14.25

모든 공용 IP 주소를 필터링하기 위해 grep 명령을 사용하고 있습니다. 내 출력은 다음과 같아야합니다

8.8.8.8
172.32.255.255
206.32.14.25

-o 플래그를 사용하지 않으면 코드가 제대로 작동합니다. 그러나 패턴만 가져오기 위해 -o 플래그를 추가하면 아무런 출력도 얻지 못합니다.

암호

egrep -vo  '172\.1[6-9]([\.][0-9]{1,3}){2}|172\.2[0-9]([\.][0-9]{1,3}){2}|172\.3[01]([\.][0-9]{1,3}){2}|10([\.][0-9]{1,3}){3}|192\.168([\.][0-9]{1,3}){2}|22[456789]([\.][0-9]{1,3}){3}|23[0-9]([\.][0-9]{1,3}){3}' private_ip

이에 대한 도움을 주시면 대단히 감사하겠습니다. 감사해요

답변1

현재 예제에서 볼 수 있듯이 GNU를 사용하면 다음과 같습니다 sed.

% sed -nr 's/^#.*\s([^\s]+)$/\1/p' file.txt 
8.8.8.8
172.32.255.255
206.32.14.25

또는 grepPCRE를 사용하세요.

% grep -Po '^#.*\s\K[^\s]+$' file.txt
8.8.8.8
172.32.255.255
206.32.14.25

답변2

공용 IP가 항상 "Hello I am public IP" 텍스트와 같은 줄에 있는 경우 다음을 사용할 수 있습니다 awk.

awk '/Hello I am public IP/ {print $6}'

줄 시작 부분의 공백은 무시되며, $6이 줄에서 공백으로 구분된 여섯 번째 필드도 무시됩니다.

관련 정보