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

MacOS下用gsed提取1-2字母前缀核心ID(含前置数字场景)

解决方法

你的问题根源在于正则的贪婪匹配:原命令中的.*会尽可能多匹配字符,导致双字母前缀ID的第一个字母被.*吃掉,只留下第二个字母和数字部分。同时需要适配前置非字母数字字符的场景,以下是修正后的方案:

修正后的命令

gsed -nE 's/.*(^|[^A-Z])([A-Z]{1,2}[0-9]+).*/\2/p' test

正则说明

  • -E:启用扩展正则表达式(ERE),避免大量转义字符,让正则更简洁。
  • (^|[^A-Z]):匹配行首或者非大写字母的字符,确保捕获的1-2个大写字母前缀不会被更长的字母序列截断(比如避免从ABC123中错误提取BC123)。
  • ([A-Z]{1,2}[0-9]+):核心捕获组,匹配1-2个大写字母后跟至少一个数字(用+替代原命令的*,避免匹配仅含字母无数字的无效内容)。
  • \2:引用第二个捕获组的内容,也就是需要提取的核心ID。

测试验证

针对你给出的场景:

  • 输入HQ544145,输出HQ544145
  • 输入24874:MH119974.1.<1.>606,输出MH119974
  • 输入U87391,输出U87391

性能优化(针对百万级记录)

直接指定文件名给gsed,避免使用cat管道(减少进程开销),这对百万条记录的处理效率提升更明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 20:09:23