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

如何用sed匹配k__开头到空格的内容并移动至行尾

问题排查

你的调整捕获组顺序的思路是完全可行的,原命令没有生效是正则规则存在几处错误:

  • 第一个捕获组(.*k__)多包含了目标字段的开头k__,导致第二个捕获组匹配错位
  • 启用-E扩展正则模式时,量词+不需要转义,你写的\w\+会被识别为匹配字面量加号,无法正常匹配多字符
  • 没有正确匹配目标字段前后的分隔空格,会导致替换后出现多余或缺失空格的问题

正确实现方案

命令写法

macOS下使用gsed:

gsed -E 's/^(.*?)\s+(k__[^ ]+)\s+(.*)$/\1 \3 \2/' test.file

Linux下使用原生sed:

sed -E 's/^(.*?)\s+(k__[^ ]+)\s+(.*)$/\1 \3 \2/' test.file

如果需要直接修改原文件,加上-i参数即可,以gsed为例:

gsed -i -E 's/^(.*?)\s+(k__[^ ]+)\s+(.*)$/\1 \3 \2/' test.file

规则说明

  • ^ 匹配行的起始位置
  • (.*?) 第一个捕获组,非贪婪匹配行开头到目标字段前的所有内容(即示例中的数字ID部分)
  • \s+ 匹配目标字段前的一个或多个分隔空格
  • (k__[^ ]+) 第二个捕获组,匹配k__开头、截止到首个空格的目标字符串,[^ ]+代表匹配所有非空格字符
  • \s+ 匹配目标字段后的一个或多个分隔空格
  • (.*)$ 第三个捕获组,匹配目标字段后到行尾的所有剩余内容
  • 替换逻辑\1 \3 \2将目标字段移动到剩余内容的末尾,保持其他内容顺序不变

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 03:45:03