我有一个日志文本文件。在其中我感兴趣的是使用一些正则表达式搜索字段(我在Win上使用notepad ++,但是甚至在Ubuntu上使用vim来解析/读取这个日志文本文件,因此任何一个都可以)
文本文件的条目如下。
src.type= DEVICE_1 <-- there is a space and then a newline char after the last letter which is 1
dst.type= ZONE_1
someparam1
src.type= DEVICE_1
dst.type= ZONE_2
someparam2
此类条目在日志文本文件中不断重复。
我有兴趣找到那些包含DEVICE_1的行,但仅限于那些在其后面有dst.type = ZONE_2的行。即
我打算找到
src.type= DEVICE_1
dst.type= ZONE_2
但不是
src.type= DEVICE_1
dst.type= ZONE_1
Notepad ++允许使用关键字作为正则表达式进行搜索。我可以使用正则表达式或任何其他方式(不一定涉及正则表达式)来查找我在文本文件中查找的这些事件。
我在使用正则表达式的notepad ++搜索中尝试了以下但没有成功:
src.type= DEVICE_1 \ndst.type= ZONE_2
还尝试了[ ]
字符类。
我如何搜索我想要找到的内容?
答案 0 :(得分:2)
在Vim中,以下模式似乎符合您的要求:
DEVICE_1\s*\n.*ZONE_2
使用/DEVICE_1\s*\n.*ZONE_2
跳转到下一场比赛。
使用:g/DEVICE_1\s*\n.*ZONE_2/command
在每场比赛中执行command
。
使用:vim DEVICE_1\s*\n.*ZONE_2 % | cw
列出quicfix窗口中的所有匹配项。
请注意,您可以轻松地使用//
重复使用最新的搜索模式。使用/foo
处理搜索模式是一种常见的策略,一旦您满意,就执行这样的替换:
:%s//bar
答案 1 :(得分:1)
在Notepad ++中,使用以下正则表达式,并启用“.matters newlines”复选框:
src.type= DEVICE_1\s+dst.type= ZONE_2
答案 2 :(得分:0)
你去找Vim:
/^\zssrc.type= DEVICE_1\ze\_.\{2,2}\_^dst.type= ZONE_2$/
重要表达的细分:
\zs
- 在此处开始匹配(将从此处突出显示); \ze
- 此处结束匹配(此处将突出显示); \_.
- 与.
相同,但也包含新行; \_^
- 与^
类似,但\_
是必需的,因为我们处于中间位置
正则表达式。对于其他人,我会向您推荐Vim的文档。