使用Bash脚本递增setup.cfg中[metadata]的次版本号
批量递增setup.cfg中[metadata]段次版本号的Bash脚本
以下是直接可用的脚本,专门处理setup.cfg文件中[metadata]段内的次版本号递增(如1.2.3→1.3.3),兼容version、=与版本号间的任意空格,且不会改动其他段的版本号:
#!/bin/bash # 遍历当前目录及子目录下所有setup.cfg文件 for cfg in $(find . -name "setup.cfg"); do # 提取[metadata]段的版本号 current_version=$(awk -F '=' ' in_metadata == 1 && /^[[:space:]]*version/ { gsub(/^[[:space:]]+|[[:space:]]+$/, "", $2) print $2 exit } /^\[metadata\]/ { in_metadata = 1 } /^\[/ && in_metadata == 1 && !/^\[metadata\]/ { exit } ' "$cfg") if [ -z "$current_version" ]; then echo "跳过 $cfg:[metadata]段未找到version项" continue fi # 校验并拆分版本号(仅处理x.y.z格式) if [[ $current_version =~ ^([0-9]+)\.([0-9]+)\.([0-9]+)$ ]]; then major=${BASH_REMATCH[1]} minor=$(( ${BASH_REMATCH[2]} + 1 )) patch=${BASH_REMATCH[3]} new_version="${major}.${minor}.${patch}" # 替换[metadata]段内的版本号,生成备份文件(.bak后缀) sed -i.bak -e '/^\[metadata\]/,/^\[/ { s/^\([[:space:]]*version[[:space:]]*=[[:space:]]*\)[0-9]\+\.[0-9]\+\.[0-9]\+/\1'"$new_version"'/ }' "$cfg" # 删除备份文件(若需要保留验证可注释此行) rm "${cfg}.bak" echo "已更新 $cfg:$current_version → $new_version" else echo "跳过 $cfg:版本号格式无效 '$current_version'(需符合major.minor.patch)" fi done
关键细节说明
- 精准定位段范围:用
awk锁定[metadata]起始到下一个段开头的区间,仅处理该范围内的version项 - 空格兼容处理:正则中用
[[:space:]]*匹配任意数量空格,适配version=1.2.3、version = 1.2.3等所有格式 - 版本号递增逻辑:通过Bash正则拆分主版本、次版本、修订号,仅对次版本号执行加1操作
- 安全修改机制:
sed -i.bak会生成原文件的备份(后缀.bak),确认修改正确后可删除备份
使用方法
- 将脚本保存为
bump_minor_version.sh - 赋予执行权限:
chmod +x bump_minor_version.sh - 在项目根目录运行脚本:
./bump_minor_version.sh
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

