You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 12:34:40