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

如何在Bash中不使用jq提取嵌套JSON的lastModifiedIn值

当然可以!不用jq,靠Shell自带的基础文本处理工具就能轻松提取出PHX。下面给你几个实用的方案,都是用默认自带的命令实现的:

先把你的目标JSON贴出来方便参考:

{"id": "Ab12", "details": "{\"timeValue\":null,\"lastModifiedIn\":\"PHX\"}", "version": 3}

方案1:grep + sed 组合

这个组合逻辑清晰,先定位目标字段,再提取值:

echo '{"id": "Ab12", "details": "{\"timeValue\":null,\"lastModifiedIn\":\"PHX\"}", "version": 3}' | grep -o '"lastModifiedIn":"[^"]*"' | sed 's/"lastModifiedIn":"\([^"]*\)"/\1/'
  • grep -o:只输出匹配到的部分,这里匹配"lastModifiedIn":"后面跟着任意非引号字符的内容
  • sed:用正则捕获组把"lastModifiedIn":"和后面的引号去掉,只留下中间的PHX

方案2:纯sed实现

如果不想用多个命令,单靠sed也能完成:

echo '{"id": "Ab12", "details": "{\"timeValue\":null,\"lastModifiedIn\":\"PHX\"}", "version": 3}' | sed -n 's/.*"lastModifiedIn":"\([^"]*\)".*/\1/p'
  • -n:关闭sed默认的整行输出,只输出我们想要的内容
  • 正则里的.*匹配字段前后的所有内容,用捕获组提取"lastModifiedIn":"和"之间的值,最后用p打印出提取的结果

方案3:awk实现

awk擅长处理字段分隔,这里用双引号做分隔符来定位目标值:

echo '{"id": "Ab12", "details": "{\"timeValue\":null,\"lastModifiedIn\":\"PHX\"}", "version": 3}' | awk -F'"' '{for(i=1;i<=NF;i++){if($i=="lastModifiedIn"){print $(i+2)}}}'
  • -F'"':把双引号设为字段分隔符
  • 遍历所有字段,当找到值为lastModifiedIn的字段时,输出它后面第二个字段(因为结构是"lastModifiedIn":"PHX",分隔后PHX刚好在目标字段的下两个位置)

注意事项

这些方法都是基于你的JSON格式固定的前提,如果后续lastModifiedIn的值出现转义双引号、或者字段位置大幅变动,可能会失效。但针对你给出的这个场景,这些方案都能稳定输出PHX。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 12:32:40