比赛后和下一场比赛前的 sed 行

Ben*_*nas 4 sed

如何获取匹配单词之后的所有行,直到下一个不同的匹配单词?

例如,我的输入如下所示。

1
2
3

5
6
Run Code Online (Sandbox Code Playgroud)

我需要sed15,在我的输出中我需要包括1但我不想包括 *5* 和其余的行。

如果我的文件不包含5,我需要将剩余的行保留到最后。

注意:我看到引用的链接看起来与我的问题重复,标题为:仅显示 2 个匹配模式之间的文本,但它没有回答我的问题。如果第二个匹配项不在文件中,那里的答案不包括处理方法。

Sté*_*las 5

sed '/1/,/5/!d;/5/d'
Run Code Online (Sandbox Code Playgroud)

将返回从包含的行开始1到包含5(不包括该行)之后的下一行的行。如果5在一个包含之后没有包含的行1,它将从包含的第一行打印1到文件的末尾。

请注意,它将打印所有相应的部分。

如果只有一个部分,或者您只对第一个部分感兴趣,另一种方法可能是:

sed -n '/1/,$!d; /5/q; p'
Run Code Online (Sandbox Code Playgroud)

这意味着sed在同一行找到 5 后或在包含1.