我试图找出如何使用Perl扫描特定文件并找到所有IP地址并阻止它们,以便我可以将IP地址中的数字转换为x。例如:194.66.82.11并且在代码运行之后,它的格式为xxx.xx.xx.11
,而不是完全删除它。这是在unix中。
答案 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的数量不同。如果这是一个问题,你必须调整正则表达式。