2010-07-11 10 views
5

¿Cómo extraigo solo las direcciones IP de un archivo de texto que tiene una dirección IP por línea? Me gustaría extraer las direcciones IP y luego enumerar las direcciones IP en un archivo separado. El archivo de texto que contiene las IP tiene el siguiente formato:¿Cómo extraer direcciones IP de un archivo de texto usando Perl?

El host somehost.com (192.168.1.1) está activo (latencia de 0.20s).
El host 10.1.0.0 está activo (latencia de 0.21s).
El host 172.1.0.0 está activo (latencia de 0.21s).


Estoy tratando de obtener el archivo de texto resultante en la salida de la siguiente manera:

192.168.1.1
10.1.0.0
172.1.0.0

¿Cuál es la mejor manera de hacer esto usando Perl?

Nota: No requiere una expresión regular que tenga en cuenta las direcciones IP válidas ... solo las direcciones IP en el formato anterior funcionarán.

Gracias!

Respuesta

15
use Regexp::Common qw/net/; 
while (<>) { 
    print $1, "\n" if /($RE{net}{IPv4})/; 
} 
1

while(<>) 
{ 
    print "$1\n" if /\b(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\b/; 
} 
+2

que se ajuste a todo tipo de cosas que no son direcciones IP válidas. Regexp :: Common :: net es mucho mejor. http://search.cpan.org/~abigail/Regexp-Common/lib/Regexp/Common/net.pm – friedo

+2

El OP dijo específicamente que no le importaba si eran direcciones IP válidas. ¿Qué significa "todo tipo de cosas"? Esto coincide con 4 conjuntos de dígitos separados por puntos, lo que me parece una caracterización justa de lo que estaba buscando. –

+6

Esto no funcionará si la dirección IP está al principio o al final de la línea. –

Cuestiones relacionadas