我需要在 jenkins 中自动生成 package.json,并且真的坚持了下来。
以下
sed
命令在管道中工作,但它更改了第二个字段,我需要更改第三个字段:
sed -i "/version/s/\\([.]\\)\\(.\\)\\(.*\\)/\\1${BUILD_NUMBER}\\3/" package.json
输出:
"version": "0.222.0"
但我需要:
"version": "0.0.222"
json输入的一部分:
{
"name": "render",
"version": "0.0.0"
"description": "",
"main": "./dist/index.js",
"bin": {
"render-ne": "./bin/re"
},
谁可以帮忙?
假设字段格式如所呈现的那样(即:
"version": "0.0.0"
),那么这些反向引用在这里并不是真正必要的。只需s
替换最后一个.
之后的文字:
sed -i '/version/s/[^.]*$/'"${BUILD_NUMBER}\"/" package.json
如果您在 MacOS X 上尝试了已接受的解决方案,您将得到以下结果:
sed:1:“package.json”:p命令末尾的额外字符
搜索类似问题后发现,在达尔文上,
sed
略有不同;这对我有用:
sed -i '' '/version/s/[^.]*$/'"${BUILD_NUMBER}\",/" package.json
我希望这可以帮助那些来这里寻找答案但发现该解决方案不适用于 sed 的所有版本的人。
对于 Mac -
使用以下内容创建一个名为
version-bump.sh
的文件
🆘 在存储库的根目录中运行此程序或更新 PACKAGE.JSON 的路径
VERSION_STRING='"version": '
CURR_VERSION=$(awk -F \" '/"version": ".+"/ { print $4; exit; }' package.json)
NEXT_VERSION=$(echo ${CURR_VERSION} | awk -F. -v OFS=. '{$NF += 1 ; print}')
sed -i '' "s/\($VERSION_STRING\).*/\1\"$NEXT_VERSION\",/" package.json
😮u200d💨
我知道这个问题特别要求使用
sed
提供解决方案,但对于任何可能有帮助的人,您可以使用以下方法在 package.json
中自动更改 semver:
npm version major # or "minor" or "patch"