Regex 如何使用grep在相同的固定长度文本段中检索两个模式?
我正在尝试使用grep从文件中提取信息,并在相关事件之间建立连接。例如,我的文件可能包含以下重复模式:Regex 如何使用grep在相同的固定长度文本段中检索两个模式?,regex,grep,alternation,Regex,Grep,Alternation,我正在尝试使用grep从文件中提取信息,并在相关事件之间建立连接。例如,我的文件可能包含以下重复模式: Section Info1 etc etc Info2 我希望能够grep搜索部分并抓取Info1和Info2。我尝试使用OR模式,即Info1\| Info2,但这会以随机顺序greps所有Info1和Info2。我希望将每个部分的Info1和Info2一起检索 所有部分的长度相同。在Info1和Info2之间总是有固定数量的行。所需输出为: Info1 Info2 Info1 Info2
Section
Info1
etc etc
Info2
我希望能够grep搜索部分并抓取Info1
和Info2
。我尝试使用OR模式,即Info1\| Info2
,但这会以随机顺序greps所有Info1
和Info2
。我希望将每个部分的Info1
和Info2
一起检索
所有部分的长度相同。在Info1
和Info2
之间总是有固定数量的行。所需输出为:
Info1
Info2
Info1
Info2
...
其中连续的Info1
/Info2
来自同一节
你知道怎么做吗?linearchoredgrep
对于您发布的示例,您不需要替换或管道。根据您的语料库,以下内容非常有用:
$ 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
这些只是包含
Info1
和Info2
的行,还是有更多的内容?etc等
总是一行吗?部分
是否总是准确地部分
?根据您的问题,您希望始终找到部分Info1 Info2
-您真的希望这样吗?你的真实数据是什么样子的?期望的输出?你尝试了什么?在问题中添加了微尘细节grep'Info1\\Info2'
如何不能给你想要的结果?是否有一些Info1
或Info2
行是您不想要的?没有,正如我所说的,问题是“Info1\| Info2”似乎随机选择Info1和Info2,并且输出方式是,两个连续的Info1和Info2不一定来自同一节grep不会改变输入行的顺序。您能否显示您的精确输入(或再现问题的最小版本)、精确命令和精确输出?