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

如何使用sed将文件中作为计数器的数字定量替换为对应重复次数的指定字符串

Sed实现方案:将数字替换为对应次数的气球标识

这有个直接能用的sed命令,完美匹配你把数字转换成对应重复次数的red/blue列表项的需求:

sed '
# 处理第一个数字行(对应red的重复次数)
/^  - [0-9]\+/{
    s/^  - //; h          # 提取数字并存入sed的临时存储区(hold space)
    s/.*/  - red/         # 将当前行替换为red的列表项格式
    :loop_red             # 定义循环标签
    g                     # 从临时存储区取出数字
    s/^\([0-9]\)\(.*\)/\1-1/  # 数字减1
    s/^0.*//              # 如果减到0就清空内容
    t end_red_loop        # 若内容为空(数字到0),跳转到循环结束标签
    x                     # 交换当前行和临时存储区的内容
    p                     # 打印red列表项
    b loop_red            # 回到循环开头继续执行
    :end_red_loop         # 循环结束标签
    x                     # 换回内容
    d                     # 删除原始数字行
}
# 处理第二个数字行(对应blue的重复次数)
/^  - [0-9]\+/{
    s/^  - //; h
    s/.*/  - blue/
    :loop_blue
    g
    s/^\([0-9]\)\(.*\)/\1-1/
    s/^0.*//
    t end_blue_loop
    x
    p
    b loop_blue
    :end_blue_loop
    x
    d
}
' input.txt

命令细节解释

  1. 匹配目标行:通过/^ - [0-9]\+/精准抓取列表里的数字行,分两次处理(第一次对应red,第二次对应blue)
  2. 存储数字:先用s/^ - //去掉列表前缀,再用h把纯数字存入sed的临时存储区,方便后续循环计数
  3. 生成初始列表项:把当前数字行直接替换成 - red或 - blue的格式
  4. 循环打印逻辑:
    • 每次从临时存储区取出数字并减1
    • 如果数字还没到0,就打印当前的气球列表项,然后回到循环继续
    • 当数字减到0时,退出循环并删掉原始的数字行,避免残留

测试方式

把你的输入内容保存为input.txt,执行上面的命令,就能得到预期输出:

balloons:
  - red
  - red
  - blue
  - blue
  - blue

这个方案支持任意正整数数字,完全适配你说的“数字随不同文件变化”的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 15:43:12