根据搜索字词上方和下方的行内容进行搜索

时间:2018-09-24 18:50:20

标签: regex grep notepad++

因此,我有一个日志文件,其中包含这样的文本..尽管有很多变体:

  

m =音频16468 RTP / AVP 0 8 9 18 120102104103101
a = rtpmap:0   pcmu / 8000
a = rtpmap:8 pcma / 8000
a = rtpmap:9 g722 / 8000
  a = rtpmap:18 g729 / 8000
a = fmtp:18 annexb =是
a = rtpmap:120   opus / 48000/2
a = rtpmap:102 iLBC / 8000
a = rtpmap:104   iSAC / 32000
a = rtpmap:103 iSAC / 16000
a = rtpmap:101   电话事件/ 8000
a = fmtp:101 0-15

,我想使用某种东西进行搜索。.记事本++ .. grep ..可能真正起作用的任何东西。

我只需要找到具有这一行的块。

  

a = rtpmap:18 g729 / 8000

但是不要在其上方或下方的4或5行中包含此行:

  

a = rtpmap:0 pcmu / 8000

关于我将如何执行此操作的任何想法?我发现了有关如何搜索某物的帖子,然后还打印出了它上面/下面的行。但是,如果上面和下面的行之一包含x,则不必显示它。

1 个答案:

答案 0 :(得分:0)

例如,在记事本++上尝试使用此方法:m=audio.*\r?\n(?!(?:^a=.*\r?\n)*^a=rtpmap:0 pcmu/8000)(?:^a=.*\r?\n)*^a=rtpmap:18 g729/8000\r?\n(?:^a=.*\r?\n)*

这将找到m=audio个块,之后必须有a=行。

只要找到a=rtpmap:18 g729/8000,并且在同一块上没有a=rtpmap:0 pcmu/8000(不管它们之间的距离如何),它将选择整个块

注意:对于记事本++,请不要使用'。匹配换行符

请参见演示 here