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

SED使用求助:删除指定模式间内容且保留第二个匹配模式

解决SED删除指定用户信息但保留下一个用户行的问题

你遇到的问题是因为SED的范围删除逻辑:/^\s*Name Rohit/,/^\s*Name/d 会把从Name Rohit行到下一个Name行的所有内容全部删除,所以连Name Ravi那行也被删掉了。结合你的场景(每个用户信息在单行),这里有两种靠谱的解决办法:

方案1:单行场景最简洁的写法

既然每个用户的信息都在单独一行,完全不需要范围匹配,直接定位到目标行删除就行:

sed '/^\s*Name Rohit/d' del.txt

这个命令的逻辑很直白:

  • ^\s* 匹配行首可能存在的空白字符
  • Name Rohit 精准匹配你要删除的用户行
  • d 执行删除操作

执行后就能得到预期输出:

Name Ravi profession = working place = chennai like = xyz

方案2:兼容多行用户信息的通用方案

如果你的实际场景里用户信息可能跨多行(比如Name Rohit单独一行,后续的profession等在其他行),可以用这个更通用的命令,它会删除从Name Rohit开始到下一个Name行之前的所有内容,同时保留下一个用户的起始行:

sed '/^\s*Name Rohit/{:a;N;/^\s*Name/!ba;s/.*\n//}' del.txt

拆解一下这个命令的逻辑:

  1. /^\s*Name Rohit/{...}:找到目标起始行后,执行大括号内的操作
  2. :a:定义一个循环标签a
  3. N:把下一行追加到当前的模式空间(相当于把多行内容合并处理)
  4. /^\s*Name/!ba:如果当前模式空间的最后一行不是以Name开头,就跳回标签a继续循环,直到找到下一个Name行
  5. s/.*\n//:把模式空间中最后一个换行符之前的所有内容清空,只保留最后一行(也就是下一个用户的Name行)

这样不管用户信息是单行还是多行,都能精准完成需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 17:37:28