2010-07-11 13 views
5

Come estrarre solo gli indirizzi IP da un file di testo che ha un indirizzo IP per riga? Vorrei estrarre gli IP e quindi elencare gli indirizzi IP in un file separato. Il file di testo che contiene gli IP è nel seguente formato:Come estrarre gli indirizzi IP da un file di testo usando Perl?

Host somehost.com (192.168.1.1) è attivo (latenza di 0.20 s).
L'host 10.1.0.0 è attivo (latenza di 0.21 s).
L'host 172.1.0.0 è attivo (latenza di 0.21 s).


Sto cercando di ottenere il file di testo risultante per l'output come segue:

192.168.1.1
10.1.0.0
172.1.0.0

Qual è il modo migliore per fare questo usando Perl?

Nota: non richiede un'espressione regolare che conti per IP validi ... solo gli IP nel formato sopra lo faranno.

Grazie!

risposta

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

che abbinerà ogni sorta di cose che non sono indirizzi IP validi. Regexp :: Common :: net è molto meglio. http://search.cpan.org/~abigail/Regexp-Common/lib/Regexp/Common/net.pm – friedo

+2

L'OP ha detto in particolare che non gli importava se si trattasse di indirizzi IP validi. Cosa significa "ogni sorta di cose"? Corrisponde a 4 serie di cifre separate da punti, il che mi sembra una buona caratterizzazione di ciò che stava cercando. –

+6

Questo non funzionerà se l'indirizzo IP è all'inizio o alla fine della linea. –

Problemi correlati