除了匹配范围结束模式的那个之外,如何使用sed打印一系列行?

bmk*_*bmk 2 regex linux shell sed range

我不知道是否有一sed打印范围内的行,由图案确定-only方式进行匹配,除了端模式匹配的一个最后一行.

考虑以下示例.我有一个文件

line  1
line  2
line  3
ABC line  4
+ line  5
+ line  6
+ line  7
line  8
line  9
line 10
line 11
line 12
Run Code Online (Sandbox Code Playgroud)

我希望得到所有以ABC(包括)开头的所有内容以及以+:

ABC line  4
+ line  5
+ line  6
+ line  7
Run Code Online (Sandbox Code Playgroud)

我试过了

sed -n '/ABC/I,/^[^+]/ p' file
Run Code Online (Sandbox Code Playgroud)

但这给了一行太多:

ABC line  4
+ line  5
+ line  6
+ line  7
line  8
Run Code Online (Sandbox Code Playgroud)

sed离开最后一行的最简单方法是什么?

anu*_*ava 5

可能有更好的方法,但我可以拿出这个sed 1班轮:

sed -rn '/ABC/,/^[^+]/{/(ABC|^\+)/!d;p;}' file
Run Code Online (Sandbox Code Playgroud)

另一个sed 1班轮是

sed -n '/ABC/,/^[^+]/{x;/^$/!p;}' file
Run Code Online (Sandbox Code Playgroud)

另一个sed 1班轮(可能更好)

sed -n '/ABC/I{h;:A;$!n;/^+/{H;$!bA};g;p;}' file
Run Code Online (Sandbox Code Playgroud)