Regex IP地址的正则表达式
我需要能够搜索通过一个日志和抓取IP地址记录。示例日志行如下所示: [2012-06-05 11:59:52]通知[14369]chan_sip.c:从“”注册'yy.yy.yy'失败-未找到匹配的对等方 我需要获取Regex IP地址的正则表达式,regex,perl,pattern-matching,ex,Regex,Perl,Pattern Matching,Ex,我需要能够搜索通过一个日志和抓取IP地址记录。示例日志行如下所示: [2012-06-05 11:59:52]通知[14369]chan_sip.c:从“”注册'yy.yy.yy'失败-未找到匹配的对等方 我需要获取yy.yy.yy.yy位置中列出的IP地址。对于其他日志文件,yy.yy.yy将位于不同的位置 我想读每一行,在'上拆分,然后循环拆分的临时数组:'yy.yy.yy'。我只是不知道如何在包含单引号的'yy.yy.yy'中进行模式匹配或正则表达式。我如何才能做到这一点?while(){
yy.yy.yy.yy
位置中列出的IP地址。对于其他日志文件,yy.yy.yy
将位于不同的位置
我想读每一行,在'
上拆分,然后循环拆分的临时数组:'yy.yy.yy'
。我只是不知道如何在包含单引号的'yy.yy.yy'
中进行模式匹配或正则表达式。我如何才能做到这一点?while(){
while (<>) {
my ($ip) = $line =~ /for '((?:[0-9]+\.){3}[0-9]+)'/
or next;
... do something with $ip ...
}
my($ip)=$line=~/for'((?:[0-9]+\){3}[0-9]+)'/
或下一步;
…用$ip做点什么。。。
}
此正则表达式将与'
'(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})'
要在perl中迭代所有匹配项,请执行以下操作:
while ($subject =~ m/'(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})'/g) {
# matched text = $&
}
比赛的第1组将只包含IP,因此没有“,我使用了这一组,它提取了我需要的所有IP。谢谢你,用一个正常的日志条目比如--2012-05-12 08:10:20481 fail2ban.actions:WARNING[ssh iptables]Ban yyy.yy.yy--我不能用((?:[0-9]+\){3}[0-9]+)获取Ban IP,是的,你可以(如果那些“y”是数字)@ikegami哦,没有看到那部分,我的错误。@ikegami一行像
[Sat Jun 16 21:32:55][2012][client 208.179.17.39]文件不存在:/var/www/html/
将不会使用上述for循环进行解析。我尝试了以下opendir(DIR,“/var/log/httpd”)或die$!;而(my$File=readdir(DIR)){next除非(-f)/var/log/httpd/$File”);if($File=~/error\\u log/){open(log,“/var/log/httpd/$File”);while(){if($\=~/File/){my($ip)=$\=~/for((?:[0-9]+\){3}[0-9]+//或next;打印“ip==>$ip\n”;}}}}关闭(日志);}}