1

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

还尝试了[ ]字符类。

如何搜索我要查找的内容?

4

3 回答 3

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
于 2013-03-15T18:33:47.893 回答
1

在 Notepad++ 中,使用以下正则表达式,启用“.matches newlines”复选框:

src.type= DEVICE_1\s+dst.type= ZONE_2

在此处输入图像描述

于 2013-03-15T17:54:20.967 回答
0

你去Vim:

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

重要表达式的分解:

  1. \zs- 从这里开始比赛(将从这里突出显示);
  2. \ze- 在此处结束比赛(将在此处突出显示);
  3. \_.- 与 相同.,但也包括新行;
  4. \_^-like ^, but\_是必需的,因为我们正处于正则表达式的中间。

对于其他人,我建议您参考 Vim 的文档。

于 2013-03-16T01:18:19.817 回答