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

在sed中如何对指定捕获组做后处理同时保留其余捕获组?

解决方案

你可以通过「分隔隔离+局部替换+合并」的通用sed思路实现需求,以下是不需要调用子shell、兼容性更好的纯sed命令:

sed -r 's/([^.]*)\.(.*)\.([^.]*)$/\1\n\2\n\3/; :loop; s/\n([^\n]*)\.([a-zA-Z0-9_-])[^\.]*/\n\1.\2/; t loop; s/\n/./g'

执行逻辑说明

  1. 拆分隔离:第一步替换将整行拆分为三段,用换行符\n(普通文本行不会包含该字符)做分隔,拆分后格式为:[第一个点前的内容]\n[中间待缩写内容]\n[最后一个点后的内容]
  2. 局部循环替换:定义循环标签loop,每次匹配两个换行中间的内容,将.完整单词替换为.单词首字母,只要替换成功就自动跳回loop重复执行,直到中间所有片段都完成缩写
  3. 合并结果:最后把所有换行符替换回.,就得到符合要求的输出

测试验证

输入:top-level.subpath.one.subpath.two.subpath.forty-five
执行上述命令后输出:top-level.s.o.s.t.s.forty-five,完全匹配预期要求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:06:05