我正在尝试使用 grep 从文件中提取信息并在相关事件之间建立联系。例如,我的文件可能包含以下重复模式:
Section
Info1
etc etc
Info2
我希望能够为部分 grep 并抓住Info1
和Info2
.我尝试使用 OR 模式,即 Info1|Info2
,但这会随机顺序Info1
和Info2
。我希望Info1
和每个部分的Info2
一起检索。
所有部分的长度相同。Info1
和 Info2
之间始终有固定数量的行。所需的输出为:
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