更新存储在json文件

时间:2016-04-04 12:05:49

标签: json shell scripting sencha-cmd

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

3 个答案:

答案 0 :(得分:3)

使用$(this).is(':checked')

awk

awk -F'["]' -v OFS='"' '/"version":/{ split($4,a,"."); $4=a[1]"."a[2]"."a[3]"."a[4]+1 } ;1' app.json IFS OFS找到与"匹配的行。

"version":split($4,a,".")第四个字段split作为分隔符并保存到数组.

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

$4:打印所有行

如果输入行是1

O / P将为"version": "1.0.0.23",

答案 1 :(得分: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

完成这项工作。

答案 2 :(得分: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文件中获取当前版本,增加补丁版本位置,将其写到新文件中,然后在第二条语句中,用新文件替换原始文件。