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

如何用sed通过变量替换JSON中的version字段值

解决sed替换JSON版本时变量不解析的问题

这问题我之前调试脚本时也踩过坑!核心原因是你用单引号包裹了sed命令——在Bash里,单引号内的所有内容都会被当作纯字面量,$符号不会被解析成变量引用,所以才会直接输出$newvalue而不是你想要的变量值。

给你几个可行的解决方案:

方案1:改用双引号包裹sed命令

把sed命令的单引号换成双引号,这样Bash会先解析里面的变量,再传给sed执行:

newvalue="1.0.0"
echo '{"version":"0.5363"}' | sed "s/\({\"version\":\"\)[^\"]*\(\"}\)/\1$newvalue\2/g"

注意:双引号里的内部双引号要加反斜杠转义(\"),避免和外层双引号冲突。

方案2:单引号拼接变量

如果习惯用单引号写sed命令,可以把变量部分单独用双引号包裹,和前后的单引号内容拼接起来:

newvalue="1.0.0"
echo '{"version":"0.5363"}' | sed 's/\({"version":"\)[^"]*\("}\)/\1'"$newvalue"'\2/g'

这里sed命令被拆成了三部分:'s/\({"version":"\)[^"]*\("}\)/\1' + "$newvalue" + '\2/g',Bash会自动把它们拼接成完整的命令,同时解析变量。

更稳妥的方案:用jq处理JSON

sed本质是文本处理工具,用来修改JSON容易因为格式变化(比如键值对之间加了空格)出错。如果你的环境能安装jq(专门的JSON处理工具),更推荐这种方法:

newvalue="1.0.0"
echo '{"version":"0.5363"}' | jq --arg v "$newvalue" '.version = $v'

--arg参数用来传递变量,.version = $v直接修改JSON的version字段,完全不用担心格式问题,比sed靠谱得多。

内容的提问来源于stack exchange,提问作者sush

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:25:53