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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了更新存储在json文件中的版本号相关的知识,希望对你有一定的参考价值。

我正在尝试编写一个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 )所以现在我可以阅读版本并增加它。只需要现在就把它写回来。

答案

使用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",

另一答案

我继续尝试使用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

做的工作。

另一答案

基于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文件获取当前版本,增加补丁版本位置,将其写入新文件,然后在第二个语句中,用新文件替换原始文件。

以上是关于更新存储在json文件中的版本号的主要内容,如果未能解决你的问题,请参考以下文章

git hook更新包json版本

解决未能加载文件或程序集“Newtonsoft.Json ...."或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)(代码片段

Oracle 数据库 - 使用UEStudio修改dmp文件版本号,解决imp命令恢复的数据库与dmp本地文件版本号不匹配导致的导入失败问题,“ORACLE error 12547”问题处理(代码片段

在 package.json 和 package-lock.json 中更新版本号而不更新依赖

在 Clojure 项目中存储项目版本号的常见约定是啥?

无法使用 ArrayObjectAdaptor 的 clear() 和 addAll() 刷新/更新浏览片段