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

如何用正则+sed/grep提取JSON指定键值?兼容XML/JSON场景

使用正则提取JSON键值的Shell命令方案

场景1:提取单个嵌套JSON的键值(abc.json)

abc.json内容:

{
"name": "marsh",
"address":[{"house_no":123,"Landmark":"Opp. to starbucks","mobile_no":{}}]
}

提取house_no的数值:

house_no=$(grep -oP '"house_no"\s*:\s*\K\d+' abc.json)
echo $house_no  # 输出123

参数说明:

  • -o:仅输出匹配到的内容
  • -P:启用Perl兼容正则表达式
  • \K:忽略前面匹配的"house_no":及前后空格,只保留后续的数字部分

提取Landmark的字符串值:

landmark=$(grep -oP '"Landmark"\s*:\s*"\K[^"]+' abc.json)
echo $landmark  # 输出Opp. to starbucks

这里用[^"]+匹配引号内的所有非引号字符,确保只提取到目标字符串内容。

场景2:提取数组中多个对象的键值(多对象JSON示例)

目标JSON内容:

{
  "id": 5229,
  "Type": B,
  "exclusions": [
      {
        "id": 3486,
        "desig": "A",
        "price": 101,
      },
      {
         "id": 3489,
         "desig": "A",
         "price": 101,
      }]},
{
  "id": 5239,
  "Type": B,
  "exclusions": []
}

提取所有desig的值:

# 提取所有值并输出
grep -oP '"desig"\s*:\s*"\K[^"]+' multi.json
# 存入数组以便后续处理
desig_array=($(grep -oP '"desig"\s*:\s*"\K[^"]+' multi.json))
# 遍历数组
for val in "${desig_array[@]}"; do
    echo $val
done

注意事项

  • 正则提取JSON仅适用于格式规范、键值不跨多行、无转义字符的场景,复杂JSON仍建议优先使用jq工具
  • 若处理XML格式,可调整正则适配标签结构,例如提取<house_no>123</house_no>的命令:
    house_no=$(grep -oP '<house_no>\K[^<]+' file.xml)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 04:50:34