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

如何用sed为多组Label数据递增生成lab、lab2等前缀?

需求描述

需要修改现有脚本,让软件二进制输出的多组Label数据,每组对应递增前缀(lab、lab2、lab3…),替代当前统一的lab前缀。

输入示例

软件二进制生成的数据:

Label 1: "AAA"
Label 2: "BBB"
Label 3: "CCC"

Label 1: "XXX"
Label 2: "YYY"
Label 3: "ZZZ"

每组Label以空行或Label 1开头,可包含任意n组。

当前输出

现有脚本生成的结果:

lab,Label 1,AAA,
lab,Label 2,BBB,
lab,Label 3,CCC,
lab,Label 1,XXX,
lab,Label 2,YYY,
lab,Label 3,ZZZ,

现有代码

labels="$(${binary} -list | sed -e '/^$/d')"
echo "$labels" | sed -e 's/: \{1,\}/,/g' -e 's/"//g' -e 's/, /,/g' -e "s|^|lab,|g" -e 's/$/,/g'

期望输出

lab,Label 1,AAA,
lab,Label 2,BBB,
lab,Label 3,CCC,
lab2,Label 1,XXX,
lab2,Label 2,YYY,
lab2,Label 3,ZZZ,

修改后的脚本方案

方案1:用awk一站式完成处理(更简洁)

直接把格式处理和分组计数整合到awk中,无需提前过滤空行:

${binary} -list | awk '
    /^$/ { next }
    /^Label 1/ { count++ }
    {
        gsub(/: +/, ",")
        gsub(/"/, "")
        prefix = (count == 1) ? "lab" : "lab" count
        print prefix "," $0 ","
    }
'

方案2:保留原有sed逻辑,结合awk加前缀

如果想保留部分sed处理步骤,可以先做格式转换,再用awk处理分组前缀:

${binary} -list | sed -e '/^$/d' -e 's/: \{1,\}/,/g' -e 's/"//g' -e 's/, /,/g' -e 's/$/,/g' | awk '
    /^Label 1/ { count++ }
    {
        prefix = (count == 1) ? "lab" : "lab" count
        print prefix "," $0
    }
'

逻辑说明

  • 以Label 1作为新分组的标记,每次遇到就递增计数器count
  • 第一组计数器为1,前缀用lab;后续组直接用lab+计数器值生成前缀
  • 两种方案都支持任意数量的分组,自动适配递增前缀

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 05:16:11