如何用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
相关产品推荐
相关产品推荐

