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

如何让sed仅对第一个匹配的文本范围生效?

解决方案:仅删除sed匹配范围内的第一块文本

当前使用的sed命令:

sed -i "/^### Header$/,/^### [^#]*$/{//!d}"

该命令会删除所有以### Header开头,到下一个三级标题之间的非标题文本。但需求是仅删除第一个匹配范围内的文本,且无法预知下一个标题的具体名称。


输入内容

### Header

blabla

### Header 2 

some text 

### Header

blabla

### Header 2 

some text 

### Header

blabla

### Header 2 

some text 

期望输出

### Header
### Header 2 

some text 

### Header

blabla

### Header 2 

some text 

### Header

blabla

### Header 2 

some text 

可行命令

使用带范围限定的sed命令,仅对第一个匹配块生效:

sed -i '0,/^### Header$/{/^### Header$/,/^### [^#]*$/{//!d}}'

命令解释

  • 0,/^### Header$/:把操作范围限制在文件开头到第一个### Header行内,确保后续逻辑只作用于第一个目标块
  • 嵌套的/^### Header$/,/^### [^#]*$/{//!d}:在上述范围内,删除### Header到下一个三级标题之间的所有非标题行
  • 外层范围的限定让后续同名标题块不会被处理,完全符合需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 07:00:07