2010-07-11 125 views
5

如何僅從每行具有IP地址的文本文件中提取IP地址?我想提取IP,然後在單獨的文件中列出IP地址。包含IP的文本文件採用以下格式:如何使用Perl從文本文件中提取IP地址?

主機somehost.com(192.168.1.1)已啓動(0.20秒延遲)。
主機10.1.0.0已啓動(延遲0.21秒)。
主機172.1.0.0已啓動(延遲0.21秒)。


我試圖讓生成的文本文件輸出如下:

192.168.1.1
10.1.0.0
172.1.0.0

什麼是最好的方式使用Perl來做到這一點?

注意:它不需要一個正則表達式來說明有效的IP地址......只是以上述格式的IP地址就可以了。

謝謝!

回答

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

,將匹配各種事情是不是有效的IP地址。 Regexp :: Common :: net要好得多。 http://search.cpan.org/~abigail/Regexp-Common/lib/Regexp/Common/net.pm – friedo 2010-07-11 05:55:01

+2

該OP明確表示,他不在乎他們是否有效的IP地址。 「各種各樣的事情」是什麼意思?這匹配了4組由點分隔的數字,這在我看來似乎是他尋找的一個公平表徵。 – 2010-07-11 06:26:18

+6

如果IP地址在行的開始或結束處,這將不起作用。 – 2010-07-11 15:45:25

相關問題