如何使用shell脚本更新JSON中的标记值(字符串和整数)



我有一个JSON文件,其中包含三个标签,我试图使用sed命令更新标签值。

demo.json

{
"useCaseName" : "demo",
"useCaseNumber" : 12,
"Case" : 221
}

我试图调用下面的函数,并通过标签和值作为参数来更新JSON文件

change(){
sed -i '/'${1}'/c   "'${1}'" : "'${2}'",' demo.json
}
change "useCaseName" "hello"
change "useCaseNumber" 2

现在的问题是上面的命令是添加双引号的useCaseNumber如下。

{
"useCaseName" : "hello",
"useCaseNumber" : "2",
"Case" : 221
}

是否有任何方法可以使用上述函数更新字符串值和整型值?

对于GNUsedbash,如果jqPerl不可用:

change() { sed -Ei 's/("{0,1})'"$1"'("{0,1}) : ("{0,1})[^,"]*("{0,1})/1'"$1"'2 : 3'"$2"'4/' demo.json; }

您可以使用正则表达式检查第二个变量是否为数字。如果是数字,则不要添加引号,反之亦然。修改后的脚本为

change(){
re='^[0-9]+$'
if ! [[ $2 =~ $re ]] ; then
#if second argument is text
sed -i '/'${1}'/c   "'${1}'" : "'${2}'",' demo.json
else
#if second argument is number
sed -i '/'${1}'/c   "'${1}'" : '${2}',' demo.json
fi

}
change "useCaseName" "hello"
change "useCaseNumber" 2

相关内容

  • 没有找到相关文章

最新更新