如何使用 grep 在相同的固定长度文本部分中检索两个模式



我正在尝试使用 grep 从文件中提取信息并在相关事件之间建立联系。例如,我的文件可能包含以下重复模式:

Section
Info1
etc etc
Info2

我希望能够为部分 grep 并抓住Info1Info2.我尝试使用 OR 模式,即 Info1|Info2 ,但这会随机顺序Info1Info2。我希望Info1和每个部分的Info2一起检索。

所有部分的长度相同。Info1Info2 之间始终有固定数量的行。所需的输出为:

Info1
Info2
Info1
Info2
...

其中连续的 Info1/Info2 s 来自同一部分知道怎么做吗?

行锚定的 grep

对于您发布的示例,您不需要交替或管道。鉴于您的语料库,以下内容工作正常:

$ grep '^Info' /tmp/foo
Info1
Info2
Info1
Info2

除非你以Info开头的部分之间有线条,否则你不需要更复杂的东西。但是,假设您的真实语料库更复杂,并且您可能需要在每个部分中进行额外的处理,我将在下面讨论固定长度的部分。

使用 grep 过滤固定长度的节

假设每个部分正好是 4 行,例如:

Section
Info1
etc etc
Info2
Section
Info1
etc etc
Info2

然后,您可以使用 -A 标志来定义匹配要返回的上下文量。然后,您可以将其通过管道输送到与任何行首Info匹配的定位表达式中。这将返回所需的结果:

$ grep -F -A3 Section /tmp/foo | grep '^Info'
Info1
Info2
Info1
Info2

最新更新