bash - 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 但仍然无法获得我正在寻找的输出
解决方案
这可能对您有用(GNU sed):
sed -n '/^\S\+:/h;G;/^Blah3:/MP;d' file
-n
使用该选项关闭隐式打印。
将任意键复制到保留空间。
将保留空间附加到每一行。
如果存在所需的键,则打印模式空间中的第一行。
注意M
regexp 上的标志允许^
在行首匹配。
选择:
sed -n '/^Blah3:/{:a;p;n;/^ -/ba}' file