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

编写Shell脚本:无指定TICKET标识时插入随机5位数字标识

为文本添加随机工单标识的Shell脚本实现

需求说明

处理单行文本:

  • 若文本已包含格式为[TICKET: XXXXX](XXXXX为任意5位数字)的标识,直接输出原内容;
  • 若未包含该标识,插入格式为[TICKET: XXXXX]的内容(XXXXX为随机5位数字),示例如下:
    • 原内容:Subject: [TICKET: 12345] test subject → 输出:Subject: [TICKET: 12345] test subject
    • 原内容:Subject: test subject → 输出:Subject: [TICKET: 67890] test subject

解决方案:使用awk实现

awk适合处理这类文本匹配与修改的场景,以下是具体实现:

基础脚本

awk '/\[TICKET: [0-9]{5}\]/ {print; next} 
     {rand_ticket = sprintf("[TICKET: %05d]", int(rand()*100000)); 
      sub(/Subject: /, "&"rand_ticket" "); print}' input.txt

代码解析

  1. 匹配检查:用正则\[TICKET: [0-9]{5}\]检测行中是否存在合规工单标识,匹配则直接打印该行并跳过后续逻辑;
  2. 生成随机标识:通过rand()生成0-1的随机数,乘以100000取整得到0-99999的数字,再用sprintf格式化为带前导0的5位数字;
  3. 插入标识:使用sub函数在Subject: 后插入生成的工单标识,确保格式与示例一致。

带随机种子的版本

为避免每次运行生成相同的随机数,可加入srand()以当前时间为种子:

awk 'BEGIN{srand()} /\[TICKET: [0-9]{5}\]/ {print; next} 
     {rand_ticket = sprintf("[TICKET: %05d]", int(rand()*100000)); 
      sub(/Subject: /, "&"rand_ticket" "); print}' input.txt

全局插入的变种

如果需要对所有无标识的行在开头插入工单标识,修改sub行为直接拼接:

awk 'BEGIN{srand()} /\[TICKET: [0-9]{5}\]/ {print; next} 
     {rand_ticket = sprintf("[TICKET: %05d]", int(rand()*100000)); 
      print rand_ticket" "$0}' input.txt

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 17:40:58