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

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

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

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

1
2
3

5
6

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

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

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

答案1

sed '/1/,/5/!d;/5/d'

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

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

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

sed -n '/1/,$!d; /5/q; p'

这意味着sed在同一行上找到 5 后或在包含 的第一行后将停止读取1

相关内容