Como extrair números IP de um arquivo de texto?

5

Como eu poderia extrair apenas números IP de um arquivo formatado como o segue?

test-Zookeeper2-Z1-solr1006 10.15.5.226
10.15.6.103 test-Zookeeper2-Z2-solr1006
10.15.5.92 test-Zookeeper3-Z1-solr1006
10.15.6.217 test-Zookeeper1-Z2-solr1006
10.15.6.83 test-Zookeeper3-Z2-solr1006
test-Zookeeper-Z1-solr1006 10.15.7.106
    
por user141649 04.11.2015 / 20:24

4 respostas

18

O Perl tem um módulo testado e comprovado para expressões regulares comuns, incluindo endereços IPv4:

$ perl -MRegexp::Common=net -lane 'print for grep {/^$RE{net}{IPv4}$/} @F' file
10.15.5.226
10.15.6.103
10.15.5.92
10.15.6.217
10.15.6.83
10.15.7.106
    
por 04.11.2015 / 20:37
5

Para os dados da amostra:

grep -o '\b[0-9.]\+\b'

ou

grep -o '[0-9.]\{7,\}'
    
por 04.11.2015 / 22:17
3

Supondo que sua entrada de exemplo esteja em um arquivo chamado test.in :

sed 's/.*\([1-9][0-9]*\.[1-9][0-9]*\.[1-9][0-9]*\.[1-9][0-9]*\).*$//' test.in

Você pode gastar muito tempo obtendo tudo "certo", como remover duplicatas e assim por diante, mas isso faz com que você comece.

    
por 04.11.2015 / 20:39
0

Uma awk way:

$ awk '{for(i=1;i<=NF;i++){if($i~/^[0-9.]{7,15}$/){print $i}}}' file
10.15.5.226
10.15.6.103
10.15.5.92
10.15.6.217
10.15.6.83
10.15.7.106

e outro perl way:

$ perl -lne '/\b[0-9.]{7,15}\b/ && print $&' file
10.15.5.226
10.15.6.103
10.15.5.92
10.15.6.217
10.15.6.83
10.15.7.106
    
por 05.11.2015 / 14:38