在 package.json 中使用 sed 进行凹凸版本

问题描述 投票:0回答:4

我需要在 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"
  },

谁可以帮忙?

json sed
4个回答
9
投票

假设字段格式如所呈现的那样(

"version": "0.0.0"
),那么这些反向引用在这里并不是真正必要的。只需
s
替换最后一个
.
之后的文字:

sed  -i '/version/s/[^.]*$/'"${BUILD_NUMBER}\"/" package.json

1
投票

如果您在 MacOS X 上尝试了已接受的解决方案,您将得到以下结果:

sed:1:“package.json”:p命令末尾的额外字符

搜索类似问题后发现,在达尔文上,

sed
略有不同;这对我有用:

sed -i '' '/version/s/[^.]*$/'"${BUILD_NUMBER}\",/" package.json

我希望这可以帮助那些来这里寻找答案但发现该解决方案不适用于 sed 的所有版本的人。


0
投票

对于 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💨


0
投票

我知道这个问题特别要求使用

sed
提供解决方案,但对于任何可能有帮助的人,您可以使用以下方法在
package.json
中自动更改 semver:

npm version major # or "minor" or "patch"

此处的文档:https://docs.npmjs.com/cli/v10/commands/npm-version

© www.soinside.com 2019 - 2024. All rights reserved.