如何使用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
相关产品推荐
相关产品推荐

