我有一个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
}
是否有任何方法可以使用上述函数更新字符串值和整型值?
对于GNUsed
和bash
,如果jq
和Perl
不可用:
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