Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何使用grep在相同的固定长度文本段中检索两个模式?_Regex_Grep_Alternation - Fatal编程技术网

Regex 如何使用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

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

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不会改变输入行的顺序。您能否显示您的精确输入(或再现问题的最小版本)、精确命令和精确输出?