0

我需要能够搜索日志并获取记录的 IP 地址。示例日志行如下所示:

[2012-06-05 11:59:52] 通知 [14369] chan_sip.c: 'yy.yy.yy.yyy' 的注册失败 - 找不到匹配的对等体

我需要获取该yy.yy.yy.yyy位置中列出的 IP 地址。对于其他日志文件,它们yy.yy.yy.yyy将处于不同的位置。

我正在考虑读取每一行,拆分' '然后循环通过拆分临时数组 for: 'yy.yy.yy.yyy'。我只是不知道如何'yy.yy.yy.yyy'使用包含的单引号进行模式匹配或正则表达式。我怎样才能做到这一点?

4

2 回答 2

1

此正则表达式将匹配您包含在 ' 中的 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,因此没有 '

于 2012-06-05T18:56:13.307 回答
0
while (<>) {
    my ($ip) = $line =~ /for '((?:[0-9]+\.){3}[0-9]+)'/
       or next;

    ... do something with $ip ...
}
于 2012-06-05T18:50:15.440 回答