我正在尝试编写一个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
与IFS
和OFS
作为"
找到匹配"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文件获取当前版本,增加补丁版本位置,将其写入新文件,然后在第二个语句中,用新文件替换原始文件。