更新存储在json文件中的版本号

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

我正在尝试编写一个shell脚本来增加存储在JSON文件中的版本的内部版本号。

{
  /**
   * The application's namespace.
   */
  "name": "AppName",

  /**
   * The version of the application.
   */
  "version": "1.0.0.23",

  /**
   * More comments.....
   */
  ....
}

如果变量已经在文件中,我已经测试了一种增加数字的简单方法:

version='1.0.0.23'
a=( ${version//./ } )                   # replace points, split into array
((a[3]++))                              # increment revision (or other part)
version="${a[0]}.${a[1]}.${a[2]}.${a[3]}"       # compose new version
echo $version                                   # outputs: 1.0.0.24

我查看了jq和jshon但是它们都不会解析JSON文件,因为它包含注释(app.json文件由Sencha Cmd自动生成)

如何使用awk / sed之类的东西读取版本属性并更新它? jsawk会更好吗?

更新我设法使用这个提取版本号:version=$( sed -n 's/.*"version": "\(.*\)",/\1/p' app2.json )所以现在我可以阅读版本并增加它。只需要现在就把它写回来。

json shell scripting sencha-cmd
3个回答
3
投票

使用awk

awk -F'["]' -v OFS='"'  '/"version":/{
    split($4,a,".");
    $4=a[1]"."a[2]"."a[3]"."a[4]+1
    }
;1' app.json

IFSOFS作为"找到匹配"version":的线。

split($4,a,".")split第四场用.作为分隔符并保存到阵列a

$4=a[1]"."a[2]"."a[3]"."a[4]+1:用新的价值重新分配$4

1:打印所有线条

如果输入行是"version": "1.0.0.23",

O / P将是"version": "1.0.0.24",


0
投票

我继续尝试使用sed并设法生成这个:

# get the existing version number
ver=$( sed -n 's/.*"version": "\(.*\)",/\1/p' app2.json )    # ver='1.0.0.43'
echo "Current version: $ver"

a=( ${ver//./ } )                           # replace points, split into array
((a[3]++))                                 # increment revision (or other part)
newVer="${a[0]}.${a[1]}.${a[2]}.${a[3]}"   # compose new version
echo "New version: $newVer"                 # newVer='1.0.0.44'

# write output
sed -i .temp "s/\"version\": \"$ver\"/\"version\": \"$newVer\"/g" app2.json

做的工作。


0
投票

基于7171u的答案,这里是一个完整的单行程序,用补丁递增版本覆盖原始json文件:

awk -F'["]' -v OFS='"'  '/"version":/{split($4,a,".");$4=a[1]"."a[2]"."a[3]+1};1' ./manifest.json > ./manifest2.json && mv ./manifest2.json ./manifest.json

这将从json文件获取当前版本,增加补丁版本位置,将其写入新文件,然后在第二个语句中,用新文件替换原始文件。

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