如何在sed命令中传递变量以替换JSON中的指定值
如何在sed命令中传递变量以替换JSON中的指定值
我懂你的困扰啦——你想用shell变量username的值替换JSON里name字段的固定内容,但之前的sed命令直接把$username写进了文件,没替换成实际的user2。这是因为单引号包裹的内容会被shell原封不动地传递,不会解析变量,得调整下命令的写法才行~
给你几个实用的解决办法:
方法1:用双引号包裹sed命令
把整个sed替换表达式放在双引号里,这样shell会先解析$username变量,再把解析后的内容传给sed执行。注意JSON里的双引号要加反斜杠转义,避免和外层的双引号冲突:
sed -i "s/\"name\": \"user1\"/\"name\": \"$username\"/g" test.json
方法2:单引号+双引号拼接
如果觉得转义双引号麻烦,可以把变量部分单独用双引号包裹,和其他单引号的固定内容拼接起来:
sed -i 's/"name": "user1"/"name": "'"$username"'"/g' test.json
这里的逻辑是:'s/"name": "user1"/"name": "'是单引号包裹的固定文本,"$username"是让shell解析变量的部分,最后'"/g'又是单引号包裹的固定文本,三者拼接后就能正确替换变量啦。
额外小提示:避免特殊字符冲突
如果你的username变量里包含/这类sed默认的分隔符,可以换个分隔符(比如#),防止命令出错:
sed -i "s#\"name\": \"user1\"#\"name\": \"$username\"#g" test.json
执行完上面的命令后,你的test.json就会变成预期的样子:
{ "name": "user2", "city": "Texas" }
备注:内容来源于stack exchange,提问作者PRIYANKA S NAIR
相关产品推荐
相关产品推荐

