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

如何将分组配置格式转换为大写前缀键值对?(Bash/Python实现)

最优方案选择:Bash vs Python 配置格式转换

嘿,这个配置格式转换需求两种方式都能实现,但得看你的使用场景来选最顺手的:如果只是一次性轻量转换,用Bash+Awk会更简便,无需额外依赖;如果需要可维护性或复杂扩展,Python会更合适。先给你上两种方案的具体实现:

方案1:Bash + Awk(轻量快捷)

Awk天生擅长这种结构化文本处理,一行命令就能搞定,直接在终端运行就行:

awk '
/^\[.*\]$/ {
    # 提取section名,把点替换成下划线,转大写
    gsub(/^\[|\]$/, "", $0)
    section = toupper($0)
    gsub(/\./, "_", section)
    next
}
/=/ {
    # 分割key和value,转key为大写并替换点为下划线,清理空格
    split($0, kv, "=")
    key = toupper(kv[1])
    gsub(/\./, "_", key)
    gsub(/ /, "", key)
    gsub(/ /, "", kv[2])
    print section "_" key "=" kv[2]
}
' input_file.txt

逻辑拆解:

  • 匹配[xxx]开头的行,提取section名称,把.换成_后转大写保存
  • 匹配包含=的行,分割出key和value,分别清理空格、转大写、替换.为_,最后拼接section和key输出完整键值对

方案2:Python(灵活可扩展)

如果后续需要处理更复杂的格式(比如嵌套section、注释、异常处理),Python的可读性和扩展性更好,写个简单脚本即可:

import re

# 定义正则匹配规则
section_pattern = re.compile(r'^\[(.*)\]$')
kv_pattern = re.compile(r'^\s*(\S+)\s*=\s*(.*)\s*$')

current_section = ""
with open('input_file.txt', 'r') as f:
    for line in f:
        line = line.strip()
        if not line:
            continue
        # 匹配section行
        sec_match = section_pattern.match(line)
        if sec_match:
            current_section = sec_match.group(1).replace('.', '_').upper()
            continue
        # 匹配key-value行
        kv_match = kv_pattern.match(line)
        if kv_match:
            key = kv_match.group(1).replace('.', '_').upper()
            value = kv_match.group(2)
            print(f"{current_section}_{key}={value}")

选Python的理由:

  • 正则表达式处理更灵活,能轻松应对各种边缘情况(比如行内的多余空格)
  • 后续要加功能(比如写入输出文件、批量处理多文件、过滤特定section)改起来更方便
  • 代码可读性高,团队里其他成员更容易理解和维护

最终选择建议:

  • 临时转文件、快速验证:直接用Bash+Awk的一行命令,打开终端就能跑,不用额外写脚本文件
  • 集成自动化流程、需要长期维护:选Python更靠谱,扩展性和可维护性更强

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:51:07