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

如何修改Shell脚本实现版本号按升序追加至配置文件正确位置

解决配置文件中版本号按升序插入的Shell脚本修改方案

原脚本的问题是仅将版本号追加到[version]行下方,未考虑版本号的排序规则。以下是修改后的脚本,能够将新版本号插入到正确的升序位置,同时修正原列表中的乱序问题:

#!/bin/bash
value_to_append="$1"
config_file="app.config"

# 定位[version]区块的行号
version_section_line=$(grep -n "\[version\]" "$config_file" | cut -d':' -f1)
# 版本列表所在行是[version]的下一行
version_list_line=$((version_section_line + 1))

# 提取并处理现有版本号:移除缩进、末尾符号,拆分为单行列表
current_versions=$(sed -n "${version_list_line}p" "$config_file" | 
  sed 's/^[[:space:]]*//' |          # 去掉行首所有空格
  sed 's/[\\,]$//' |                 # 去掉末尾的反斜杠和逗号
  tr ', ' '\n' |                     # 将逗号+空格分隔的版本号转为每行一个
  grep -v '^$')                      # 过滤空行

# 加入新版本号,按版本规则排序后重构格式
new_version_line=$(echo -e "$current_versions\n$value_to_append" | 
  sort -V |                          # 按版本号升序排序(支持多段数字正确排序)
  paste -sd ', ' - |                 # 用逗号+空格拼接成一行
  sed 's/^/        /' |              # 恢复原有的8个空格缩进
  sed 's/$/, \\')                    # 添加上末尾的逗号和反斜杠

# 替换原文件中的版本列表行
sed -i "${version_list_line}c $new_version_line" "$config_file"

关键步骤说明

  1. 定位版本行:先找到[version]的行号,版本列表固定在其下一行。
  2. 清理现有版本:移除行首缩进、末尾的\和逗号,把逗号分隔的版本拆成单行,避免空格或空行干扰排序。
  3. 版本排序:使用sort -V实现标准版本号排序(比如能正确识别1.2.2.10排在1.2.2.9之后)。
  4. 恢复格式:重构后的行保留原文件的缩进和末尾符号,保证配置文件格式一致。

注意事项

  • 若使用macOS,系统自带的sort不支持-V选项,需先通过brew install coreutils安装GNU工具集,然后将脚本中的sort替换为gsort。
  • 若原配置文件的版本行缩进不是8个空格,需修改sed 's/^/ /'中的空格数量匹配实际格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 13:53:31