¿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 awk
manera:
$ 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 perl
manera:
$ 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