Wie extrahiere ich IP-Nummern aus einer Textdatei?

Wie extrahiere ich IP-Nummern aus einer Textdatei?

Wie kann ich nur IP-Nummern aus einer Datei extrahieren, die wie folgt formatiert ist?

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

Antwort1

Perl verfügt über ein bewährtes Modul für gängige reguläre Ausdrücke, einschließlich IPv4-Adressen:

$ 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

Antwort2

Für die Beispieldaten:

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

oder

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

Antwort3

Angenommen, Ihre Beispieleingabe befindet sich in einer Datei mit dem Namen test.in:

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

Sie könnten viel Zeit damit verbringen, alles „richtig“ hinzubekommen, z. B. Duplikate zu entfernen usw., aber hiermit können Sie einen ersten Eindruck gewinnen.

Antwort4

Ein awkWeg:

$ 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

Und anders perlgeht's:

$ 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

verwandte Informationen