如何用Sed删除单行内指定模式间内容且保留模式本身
使用Sed实现单行内特定模式间内容的删除需求
嘿,这就给你搞定这个Sed的需求!要实现删除单行内第一个匹配的":"与后续可选的"Brown"/"Cat"/"Yellow"之间的所有内容,同时保留这两个模式本身,直接用下面这个命令就行:
sed -E 's/:([^BCY]*)(Brown|Cat|Yellow)/:\2/g'
命令拆解说明:
-E:启用扩展正则表达式,这样写括号不用额外转义,语法更简洁s/匹配规则/替换内容/g:g表示全局处理单行内的所有匹配项,刚好对应你单行里多个需要处理的片段- 匹配规则部分:
::精准匹配我们要保留的第一个模式([^BCY]*):捕获组1,专门匹配":"之后到目标词之前的所有内容——这里用[^BCY]是因为你指定的第二个模式都是以B、C、Y开头,这样能精准停在第一个目标词的位置,不会误删后续内容(Brown|Cat|Yellow):捕获组2,匹配我们要保留的三个可选目标模式
- 替换内容
:\2:直接把匹配到的整段替换成保留的":"加上捕获组2的内容,完美去掉中间不需要的部分
示例验证:
输入文本:
:1543453 Brown Fox :789 123456 Cat :abcdef Yellow Duck
运行命令后输出:
:Brown Fox :Cat :Yellow Duck
完全符合你的预期!而且这个命令只会处理单行内容,绝对不会跨多行操作,完全满足你的要求。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

