You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用sed选取匹配指定模式的行及其紧邻的下一行?

sed 选取匹配行及紧邻下一行的实现方案

需求1:选取所有包含 tag="foo" 的行及其紧邻下一行

实现命令

sed -n '/tag="foo"/{p;n;p}' 你的目标文件

命令解释

  • -n 参数:关闭sed的默认输出行为,只有手动指定打印的内容才会输出
  • 匹配到包含tag="foo"的行时,执行大括号内的操作:
    • p:打印当前匹配到的行
    • n:读取下一行内容到模式空间
    • p:打印刚刚读取的下一行

效果示例

假设测试文件内容如下:

行1:普通测试行
行2:这里包含 tag="foo" 标记
行3:是tag匹配行的下一行
行4:无匹配的普通行
行5:这里也有 tag="foo" 标记
行6:是第二组匹配的下一行
行7:其他无关行
执行命令后输出内容为:
行2:这里包含 tag="foo" 标记
行3:是tag匹配行的下一行
行5:这里也有 tag="foo" 标记
行6:是第二组匹配的下一行

需求2:选取包含 tag="foo" 或者 group="bar" 的行,及各自的紧邻下一行

实现命令

只需要在匹配规则中增加或逻辑即可,有两种写法可选:

  1. 兼容大部分sed版本的写法:
sed -n '/tag="foo"\|group="bar"/{p;n;p}' 你的目标文件
  1. GNU sed 可使用扩展正则减少转义:
sed -nr '/tag="foo"|group="bar"/{p;n;p}' 你的目标文件

效果示例

假设测试文件内容如下:

行1:包含 group="bar" 分组标记
行2:是group匹配行的下一行
行3:普通测试行
行4:包含 tag="foo" 标记
行5:是tag匹配行的下一行
行6:无匹配的普通行
执行命令后输出内容为:
行1:包含 group="bar" 分组标记
行2:是group匹配行的下一行
行4:包含 tag="foo" 标记
行5:是tag匹配行的下一行

注意事项

如果匹配到的行是文件的最后一行,没有后续的下一行,则只会输出匹配到的该行内容,不会报错也不会输出空行。

内容的提问来源于stack exchange,提问作者ICDeadPpl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 15:54:03