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

如何用sed/awk等工具处理ID:提取前3字符整数并替换对应前缀?

处理ID列表的前缀替换与整数提取需求

问题描述

我有一个存储在文件example中的ID列表,内容如下:

3SN0P00000026941
14N0P00000026677
6SN0P00000024671
3SN0P00000018643

期望输出如下:

ENSN0P00000026941 3
ENSN0P00000026677 14
ENSN0P00000024671 6
ENSN0P00000018643 3

具体需求:

  • 提取每行前3个字符中的所有整数
  • 根据整数数量替换前缀:1个整数则替换为EN,2个整数则替换为ENS
  • 行尾输出提取出的整数

之前尝试sed 's/^.../ENS/g'未达到预期效果,寻求awk、sed或其他工具的实现方案。

解决方案

使用awk实现

awk的逻辑处理能力更适合这类需要提取、统计与分支判断的场景:

awk '{
    # 获取前3个字符作为原始前缀
    orig_prefix = substr($0, 1, 3)
    # 提取前缀中的所有数字
    nums = orig_prefix
    gsub(/[^0-9]/, "", nums)
    # 根据数字长度选择新前缀
    new_prefix = length(nums) == 1 ? "EN" : "ENS"
    # 拼接新前缀、原行剩余内容与提取的数字并输出
    print new_prefix substr($0, 4) " " nums
}' example

使用sed实现

通过正则匹配分组与分支处理两种数字数量的情况:

sed -E '
    # 处理前3字符含2个数字的情况(如14N)
    s/^([0-9]{2})([A-Z])(.*)/ENS\3 \1/;
    # 处理前3字符含1个数字的情况(如3SN)
    s/^([0-9])([A-Z]{2})(.*)/EN\3 \1/
' example

这个写法直接通过分组捕获数字和字母部分,一步完成前缀替换与数字提取。

内容的提问来源于stack exchange,提问作者Dr. Coke

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 01:13:25