如何使用 .json 文件的 sed 命令将版本号的最后一位替换为前面的数字

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

我有一个 package.json 文件,其中包含版本行号:

"version": "3.2.47",

我想用sed更改版本号,使版本号的最后一部分少1。所以在上面的例子中它将变成:

"version": "3.2.46",

其他例子:

"version": "3.2.50",

将变成:

"version": "3.2.49",

我该怎么做?我一开始尝试用任何东西替换整个内容,但由于引号而在第一个障碍中失败了。

请记住,同一文件中的其他内容还会有其他版本号,因此它需要定位这一特定行,即其中包含

"version": 
的行。

我的尝试没有任何作用:

sed -i -E "s/\"version\": \"\d+\.\d+\.\d*\d\"/zzzz/g" package.json
linux sed
1个回答
0
投票

如果是json,你可以使用像

jq
这样的json感知工具来处理。天真地:

jq '
    .version |= (
        split(".") as $a |
        ($a|last|tonumber-1) as $n |
        $a[0:-1]+[$n]|join(".")
    )
' package.json >package.json.new
© www.soinside.com 2019 - 2024. All rights reserved.