正则表达式搜索文本文件中的多行字段

时间:2013-03-15 17:44:57

标签: regex search vim notepad++

我有一个日志文本文件。在其中我感兴趣的是使用一些正则表达式搜索字段(我在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

还尝试了[ ]字符类。

我如何搜索我想要找到的内容?

3 个答案:

答案 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

enter image description here

答案 2 :(得分:0)

你去找Vim:

/^\zssrc.type= DEVICE_1\ze\_.\{2,2}\_^dst.type= ZONE_2$/

重要表达的细分:

  1. \zs - 在此处开始匹配(将从此处突出显示);
  2. \ze - 此处结束匹配(此处将突出显示);
  3. \_. - 与.相同,但也包含新行;
  4. \_^ - 与^类似,但\_是必需的,因为我们处于中间位置 正则表达式。
  5. 对于其他人,我会向您推荐Vim的文档。