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

如何使用sed替换JSON文件指定行的变量值?

使用sed修改JSON文件指定行的可变键值

针对你要修改my.json第3行中"group-1"为变量$username值的需求,这里有几个实用的sed方案:

基础方案(匹配固定格式的键值)

如果目标行的格式固定为"name": "group-1",,可以直接用以下命令替换引号内的内容:

sed -i "3s/\"group-[0-9]*\"/\"$username\"/" my.json

命令解释:

  • -i:直接在原文件上修改(in-place编辑),注意macOS系统的sed需要写成-i '',否则会自动生成备份文件。
  • 3:明确指定只操作第3行,避免影响其他行。
  • s/old/new/:sed的替换核心语法,这里用"group-[0-9]*"匹配类似"group-1"、"group-123"这类格式的字符串,替换为"$username"(双引号包裹命令才能让shell解析变量)。

更通用的方案(匹配任意键值内容)

如果"name"后面的内容不一定是group-xxx,而是任意字符串,用这个更稳妥:

sed -i "3s/\"name\": \"[^\"]*\"/\"name\": \"$username\"/" my.json

这里"[^\"]*"表示匹配引号内的任意内容,不管原来的值是什么,都会替换成$username的值。

处理含特殊字符的用户名

如果$username里包含/这类sed默认的分隔符,会导致命令出错,换用其他分隔符(比如#)即可:

sed -i "3s#\"name\": \"[^\"]*\"#\"name\": \"$username\"#" my.json

额外提示:复杂JSON推荐用jq

虽然sed能解决单行修改的需求,但如果你的JSON结构复杂,更推荐用专门的JSON处理工具jq,它能避免文本匹配带来的意外问题:

# 假设第3行是JSON数组的第三个元素(索引从0开始)
jq --arg user "$username" '.[2].name = $user' my.json > temp.json && mv temp.json my.json

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:50:41