¿Cómo extraer números de IP de un archivo de texto?

¿Cómo extraer números de IP de un archivo de texto?

¿Cómo podría extraer solo números de IP de un archivo formateado como el siguiente?

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

Respuesta1

Perl tiene un módulo probado y verdadero para expresiones regulares comunes, incluidas direcciones 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

Respuesta2

Para los datos de muestra:

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

o

grep -o '[0-9.]\{7,\}'

Respuesta3

Suponiendo que la entrada de su ejemplo esté en un archivo llamado test.in:

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

Podrías dedicar mucho tiempo a conseguir que todo esté "bien", como eliminar duplicados, etc., pero esto te ayudará a empezar.

Respuesta4

Una awkmanera:

$ 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

Y de otra perlmanera:

$ 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

información relacionada