![如何从文本文件中提取 IP 号码?](https://linux22.com/image/76680/%E5%A6%82%E4%BD%95%E4%BB%8E%E6%96%87%E6%9C%AC%E6%96%87%E4%BB%B6%E4%B8%AD%E6%8F%90%E5%8F%96%20IP%20%E5%8F%B7%E7%A0%81%EF%BC%9F.png)
如何从格式如下的文件中仅提取 IP 号码?
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
答案1
Perl 有一个经过验证的常见正则表达式模块,包括 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
答案2
对于样本数据:
grep -o '\b[0-9.]\+\b'
或者
grep -o '[0-9.]\{7,\}'
答案3
假设您的示例输入位于名为的文件中test.in
:
sed 's/.*\([1-9][0-9]*\.[1-9][0-9]*\.[1-9][0-9]*\.[1-9][0-9]*\).*$/\1/' test.in
您可能会花费大量时间让一切“恰到好处”,例如删除重复项等,但这可以让您开始。
答案4
一个awk
办法:
$ 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
还有另一种perl
方式:
$ 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