首页 > 解决方案 > grep 所有行数不一致的模式后的所有内容

问题描述

我正在尝试找到一种从一堆类似文件中提取特定文本的方法。例子:

-
Blah1: stuff
Blah2: stuff
Blah3:
 - bingo
 - this
 - is
 - what im looking for
Blah4: stuff
-
Blah1: stuff
Blah2: stuff
Blah3:
 - bingo this is
 - what im looking for
Blah4: stuff

然而,“宾果游戏这就是我正在寻找的”并不总是 4 行,有时是 2 或 15 行遵循相同的模式,但总是以新行开头并继续-,Blah3 总是 Blah3

我需要一种获得仅显示输出的方法

Blah3:
- Bingo
- this
- is
- what im looking for
Blah3:
- bingo this is
- what im looking for

尝试使用 -A ongrep但 Blah3: 之后出现的行数不一致并尝试使用相当多的正则表达式和 grep 但仍然无法获得我正在寻找的输出

标签: bashsedgrep

解决方案


这可能对您有用(GNU sed):

sed -n '/^\S\+:/h;G;/^Blah3:/MP;d' file

-n使用该选项关闭隐式打印。

将任意键复制到保留空间。

将保留空间附加到每一行。

如果存在所需的键,则打印模式空间中的第一行。

注意Mregexp 上的标志允许^在行首匹配。

选择:

sed -n '/^Blah3:/{:a;p;n;/^ -/ba}' file

推荐阅读