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

使用awk/sed批量修改配置文件:插入ProgramName到指定位置

解决方案

使用 sed 批量处理配置文件

方式一:基于文件名提取ProgramName

因为配置文件名(如ProgramName.conf)和第一行的ProgramName完全一致,直接从文件名截取即可:

for conf in *.conf; do
    prog_name="${conf%.conf}"
    # 修改command行并备份原文件(备份为*.conf.bak)
    sed -i.bak "s/^command=\(.*--name\) artisan/\1 $prog_name artisan/" "$conf"
done

方式二:基于文件第一行提取ProgramName

如果需要从配置文件第一行[program:ProgramName]中提取名称(不依赖文件名),可以用sed的缓存空间实现:

for conf in *.conf; do
    sed -i.bak '
    # 匹配第一行的program定义,提取名称存入缓存
    /^\[program:/ {
        s/^\[program:\(.*\)\]/\1/
        h
    }
    # 处理command行,将缓存的名称插入到指定位置
    /^command=/ {
        G
        s/--name artisan/--name \x0artisan/
        s/\n//
    }
    ' "$conf"
done

提示:-i.bak参数会自动创建原文件的备份,若不需要备份,Linux系统可改为-i,macOS系统需改为-i ''。

使用 awk 批量处理配置文件

方式一:基于文件名提取ProgramName

for conf in *.conf; do
    prog_name="${conf%.conf}"
    # 处理每一行,替换完成后覆盖原文件
    awk -v prog="$prog_name" '
    /^command=/ {
        sub(/--name artisan/, "--name " prog " artisan")
    }
    1' "$conf" > temp && mv temp "$conf"
done

方式二:基于文件第一行提取ProgramName

for conf in *.conf; do
    awk '
    # 第一行提取ProgramName
    NR==1 {
        match($0, /\[program:(.*)\]/, res)
        prog = res[1]
    }
    # 替换command行的目标内容
    /^command=/ {
        sub(/--name artisan/, "--name " prog " artisan")
    }
    1' "$conf" > temp && mv temp "$conf"
done

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 21:31:07