![比赛之后和下一场比赛之前的 sed 行](https://linux22.com/image/57649/%E6%AF%94%E8%B5%9B%E4%B9%8B%E5%90%8E%E5%92%8C%E4%B8%8B%E4%B8%80%E5%9C%BA%E6%AF%94%E8%B5%9B%E4%B9%8B%E5%89%8D%E7%9A%84%20sed%20%E8%A1%8C.png)
如何获取匹配单词之后直到下一个不同匹配单词的所有行?
例如,我的输入如下所示。
1
2
3
5
6
我需要sed
从1到5在我的输出中我需要包括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
。