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

如何使用sed命令提取JSON值并赋值给变量?

使用sed提取类JSON中的值并转换为变量格式

没问题,我来帮你搞定这个sed提取的需求!针对你给出的类JSON格式({url:news.google.com,int:3}),可以用下面的sed命令实现:

echo "{url:news.google.com,int:3}" | sed -E 's/^\{//; s/\}$//; s/,/ /g; s/([^:]+):([^,]+)/\1=\2/g'

执行后就会输出:url=news.google.com int=3

命令分步解释

我把每个sed操作拆解开,方便你理解:

  • -E:启用扩展正则表达式,让正则写法更简洁,不用额外转义很多特殊字符
  • s/^\{//:移除字符串开头的左大括号{
  • s/\}$//:移除字符串结尾的右大括号}
  • s/,/ /g:把所有逗号,替换成空格,这样两个键值对就分开了
  • s/([^:]+):([^,]+)/\1=\2/g:核心替换规则——匹配键:值的格式,把冒号换成等号。其中([^:]+)匹配冒号前的键名(所有非冒号字符),([^,]+)匹配冒号后到下一个逗号前的值(所有非逗号字符),最后用\1=\2把两者拼接成键=值的格式

针对标准JSON的适配(如果你的JSON是带引号的标准格式)

如果你的输入是标准JSON(比如{"url":"news.google.com","int":3}),可以调整sed命令来处理引号:

echo '{"url":"news.google.com","int":3}' | sed -E 's/^\{//; s/\}$//; s/",/ /g; s/"([^"]+)":"([^"]+)"/\1=\2/g; s/"([^"]+)":([0-9]+)/\1=\2/g'

这个命令额外处理了字符串值的引号和数字值的情况,执行后同样能得到url=news.google.com int=3

小提醒

sed适合处理这种结构简单的JSON/类JSON数据,如果遇到嵌套结构、数组或者更复杂的JSON,更推荐用jq工具(专门处理JSON的工具),它能更稳定、灵活地解析JSON。不过如果只是你的需求里这种简单场景,sed完全够用啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:45:51