我正在绞尽脑汁试图找出如何制作正则表达式以找到我要找的东西。我想找到一个项目的每一个出现,然后找到与该项目一起的前一行的第一个字符串。以下是一个例子
.
<tag name="host-ip">192.168.5.4</tag>
.
[Poodle 12345]
.
<tag name="host-ip">192.168.5.75</tag>
.
[Poodle 12345]
每个点代表多行不相关的文本。我还需要搜索Poodle字符串,而不是IP。 IP首先列在xml文件中,然后主机容易受到Poodle的攻击,[Poodle 12345]会显示在报告中。我想要一个仅列出的IP列表,但是首先需要找到Poodle字符串,然后需要显示之前的随机IP。 (如下所示)
192.168.5.4
192.168.5.75
.
.
192.168.5.100
使用正则表达式在Notepad ++中执行此操作最简单,因为它是一个xml文件,但通过cmd行输出也可以。任何帮助将不胜感激,因为我不是一名注册专家。即使这是不可能的,任何能让我走上正轨的东西都会受到赞赏。谢谢!
答案 0 :(得分:3)
鉴于您已展示的示例文字,我会写
awk -F'[<>]' '/tag name="host-ip"/ {ip=$3} /Poodle 12345/ {print ip}' file
另一种想到的方法是反转文件。然后,当您找到&#34; Poodle&#34;时,输出 next IP。
答案 1 :(得分:0)
在你的情况下,我会使用先行断言:寻找一个IP地址,后跟一些字符串,然后是[Poodle 12345]
字符串。
这是正则表达式:
(\d{1,3}\.){3}\d{1,3}(?=<\/tag>[\na-z\."]*\n\[Poodle\s[\d]{5}\])
一些解释:
(\d{1,3}\.){3}\d{1,3}
ip address; (?=
lookahead断言; <\/tag>[\na-z\."]*\n\[Poodle\s[\d]{5}\]
在IP地址之后我们期待的是什么。您可以在此处进行测试:https://regex101.com/r/gT0zO3/2