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

如何使用sed仅删除指定序号的匹配地址范围

sed按序号删除指定匹配地址范围的方法

sed -n '/#/,/\$/p'会匹配文本中所有从包含#的行开始、到第一个包含$的行结束的连续文本块,要实现按序号删除第N个匹配块,可以通过块内计数判断的方式实现,无需额外工具配合。


删除第2个匹配块的可用命令

直接对目标文件执行以下命令,即可得到你给出的预期输出:

sed '
:loop
/#/ {
  x
  s/^/1/
  /^1\{2\}$/ {
    x
    :del_block
    N
    /\$/!b del_block
    d
  }
  x
  N
  /\$/!b loop
}
' 你的文件路径

自定义删除序号的方法

如果需要删除第N个匹配块,只需要把命令中正则/^1\{2\}$/里的数字2替换为目标序号即可:

  • 删除第1个匹配块:替换为/^1\{1\}$/
  • 删除第3个匹配块:替换为/^1\{3\}$/

效果验证

对你提供的测试文本执行上述删除第2个块的命令,输出结果和预期完全一致:

foo
#bar
foo
$
foobar
foobar

小提示:如果不需要直接修改原文件,可以在命令末尾加> 输出文件路径将结果保存到新文件;如果要直接修改原文件,给sed添加-i参数即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 06:39:23