2010-07-11 124 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

相关问题