我如何使用Perl过滤掉日志文件或任何其他文件中的IP地址?

时间:2014-07-23 13:28:24

标签: perl unix solaris

我试图找出如何使用Perl扫描特定文件并找到所有IP地址并阻止它们,以便我可以将IP地址中的数字转换为x。例如:194.66.82.11并且在代码运行之后,它的格式为xxx.xx.xx.11,而不是完全删除它。这是在unix中。

2 个答案:

答案 0 :(得分:0)

您已在评论中说明您正在处理日志文件:

192.168.72.177 - - [22/Dec/2002:23:32:19 -0400] "GET /search.php HTTP/1.1" 400 1997 www.yahoo.com "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; ...)" "-" –

因此,我建议您只编辑日志文件的第一个字段以获得结果。

使用perl one-liner

perl -lane '$F[0] =~ s/\d(?=.*\.)/x/g; print "@F"' file.log

输出:

xxx.xxx.xx.177 - - [22/Dec/2002:23:32:19 -0400] "GET /search.php HTTP/1.1" 400 1997 www.yahoo.com "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; ...)" "-" –

答案 1 :(得分:-1)

要匹配以句点分隔的4个数字(最大长度为3),您可以使用以下正则表达式:

(?:[0-9]{1,3}\.){3}([0-9]{1,3})

您可以在替换时使用\1访问最后一个捕获组(第一个是非捕获组),例如xxx.xxx.xxx.\1。请注意,结果与原始IP具有数字的x s的数量不同。如果这是一个问题,你必须调整正则表达式。