【发布时间】:2018-09-10 19:37:01
【问题描述】:
我正在尝试编写一个正则表达式来解析由我们的数百个路由器生成的日志文件。该日志是一个脚本,它尝试 ping 环境中的每个其他路由器。这是为了合规,以证明我们无法 ping 环境中的其他每个路由器。日志看起来类似于以下摘录(只是大得多)。
Interface Name = INTNET1
IP Address = 192.168.200.200,
---PING Section---
PING 192.168.200.200: 56 data bytes
64 bytes from 192.168.200.200: icmp_seq=0. time=0. ms
64 bytes from 192.168.200.200: icmp_seq=1. time=0. ms
----192.168.200.200 PING Statistics----
2 packets transmitted, 2 packets received, 0% packet loss
round-trip (ms) min/avg/max = 0/0/0
no answer from 192.168.12.13
no answer from 192.168.151.1
no answer from 192.168.19.1
no answer from 192.168.84.1
64 bytes from 192.168.100.100: icmp_seq=0. time=0. ms
64 bytes from 192.168.100.100: icmp_seq=1. time=0. ms
----192.168.100.100 PING Statistics----
2 packets transmitted, 2 packets received, 0% packet loss
round-trip (ms) min/avg/max = 0/0/0
因为脚本中列出了所有路由器,所以每个路由器都会 ping 自己并收到肯定的回复。使用它来收集路由器的管理。知识产权:
IP\sAddress\s*\=\s*(?<MGMTIP>.*)
我想通过以下模式(PING 统计行)的匹配项进行负前瞻
\-\-\-\-(.*)\-\-\-\-
并且仅当地址与命名组不匹配时才匹配。 我已经破解了一段时间,但似乎无法让它工作。
编辑: 我想知道我是否过于复杂了。在整个字符串块中,我真正需要的只是匹配具有此模式的任何行:
\-\-\-\-(.*)\-\-\-\-
但仅在与此模式中的第 1 组不匹配时才捕获“(.*)”部分(与发出 ping 的主机的 IP 地址匹配)
IP\sAddress\s*\=\s*(.*)
【问题讨论】:
-
根据您发布的输入,您能否举一个预期输出的示例?
-
当然。我只想在具有“----a.b.c.d PING Statistics----”的任何行上获取与命名组“MGMTIP”不匹配的所有IP地址
标签: regex regex-negation