Problema com grep -o

0

Eu tenho um arquivo de texto como mostrado abaixo.

    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

Estou usando o comando grep para filtrar todos os endereços IP públicos. E minha saída deve ser assim

8.8.8.8
172.32.255.255
206.32.14.25

Meu código funciona perfeitamente se eu não estiver usando o sinalizador -o. Mas se eu adicionar o sinalizador -o para obter apenas o padrão, não obtenho nenhuma saída.

CÓDIGO

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

Qualquer ajuda com isso seria apreciada. Obrigado

    
por Swatesh Pakhare 28.03.2016 / 03:41

2 respostas

0

Como seu exemplo atual, Usando GNU sed :

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

Ou grep com o PCRE:

% grep -Po '^#.*\s\K[^\s]+$' file.txt
8.8.8.8
172.32.255.255
206.32.14.25
    
por 28.03.2016 / 03:51
0

Se os IPs públicos estiverem sempre alinhados com o texto "Olá, sou IP público", você pode usar awk da seguinte forma:

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

O espaço em branco no início da linha é ignorado, por isso $6 é o sexto campo separado por espaço em branco nessas linhas.

    
por 28.03.2016 / 05:10