多行模式的正则表达式然后它们相互跟随

Regex for multiline patterns then they are following each other

我正在尝试查找顺序为“aaa”和“bbb”的行,而这些字符串位于不同的行上。

11 aaa blah blah
bbb blah blah
blah blah blah blah
aaa blah blah blah blah
blah blah blah blah
11 bbb blah blah
blah blah blah blah

使用这种多行模式 .*?(.|\n)*? 我得到了字符串之间的所有行:

11 aaa blah blah
bbb blah blah

aaa blah blah blah blah
blah blah blah blah
11 bbb blah blah

但我需要匹配他们,然后他们才会互相关注。例如。 aaa 在第一行,bbb 在第二行。输出应该是:

11 aaa blah blah
bbb blah blah

您可以使用

pcregrep -Mo '.*aaa.*\R.*bb.*' file

M 选项允许 pcregrep“查看”换行符并将它们与正则表达式匹配,o 将输出匹配的文本。

模式匹配

  • .*aaa.* - 一行包含 aaa
  • \R - 一个换行符
  • .*bbb.* - 一行包含 bbb