0

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

Section
Info1
etc etc
Info2

我希望能够对 Section 进行 grep 并抓取Info1Info2. 我尝试使用 OR 模式,即 ,Info1\|Info2但这会以随机顺序排列所有Info1内容Info2。我希望Info1Info2每个部分一起检索。

所有部分的长度相同。Info1和之间总是有固定数量的行Info2。所需的输出是:

Info1
Info2
Info1
Info2
...

其中连续Info1/ Info2s 来自同一部分任何想法如何做到这一点?

4

1 回答 1

0

线锚式 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
于 2016-02-12T04:43:32.320 回答