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

如何使用sed修改package文件指定行的动态版本号?

用sed动态修改NuGet包配置文件的指定版本号

核心思路

不要依赖固定行号(行号可能随文件内容变动失效),直接通过package id精准定位目标行,替换动态变化的版本号。脚本接收两个参数,分别对应OdicoGeometryOps和VSDaVinci的目标版本。

实现脚本

创建一个shell脚本(比如update-package-versions.sh),内容如下:

#!/bin/bash

# 检查参数是否齐全
if [ $# -ne 2 ]; then
    echo "用法: $0 <OdicoGeometryOps目标版本> <VSDaVinci目标版本>"
    exit 1
fi

# 定义目标配置文件路径(可根据实际路径修改)
PACKAGE_FILE="packages.config"

# 使用sed修改指定包的版本号
sed -i.bak \
    -e '/id="OdicoGeometryOps"/s/version="[^"]*"/version="'$1'"/' \
    -e '/id="VSDaVinci"/s/version="[^"]*"/version="'$2'"/' \
    "$PACKAGE_FILE"

# 可选:删除备份文件(如果不需要保留原文件备份,取消下面注释)
# rm "$PACKAGE_FILE.bak"

echo "版本更新完成!"

关键命令解析

  • -i.bak:直接修改目标文件,同时生成.bak后缀的备份文件(避免误操作丢失原内容)
  • /id="OdicoGeometryOps"/:精准匹配包含指定package id的行,比依赖行号更稳定
  • s/version="[^"]*"/version="'$1'"/:将该行中version="..."的内容替换为传入的第一个参数($1),[^"]*能匹配任意非双引号字符,覆盖所有动态版本号格式

使用方法

  1. 给脚本添加执行权限:
chmod +x update-package-versions.sh
  1. 运行脚本并传入目标版本:
./update-package-versions.sh "1.0.0-20240520-100000" "2.1.0"

跨平台注意事项

如果是BSD sed(比如macOS系统),-i参数语法略有不同,需调整为:

sed -i '' \
    -e '/id="OdicoGeometryOps"/s/version="[^"]*"/version="'$1'"/' \
    -e '/id="VSDaVinci"/s/version="[^"]*"/version="'$2'"/' \
    "$PACKAGE_FILE"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 17:35:13