我试图编写一个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 )
所以现在我可以阅读版本并增加它。现在只需要把它写回来。
答案 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文件中获取当前版本,增加补丁版本位置,将其写到新文件中,然后在第二条语句中,用新文件替换原始文件。