如何从JSON文件grep特定值?

时间:2019-06-24 10:26:18

标签: json shell grep

我有一个JSON文件,内容如下:

[  
       {  
          "id":"54545-f919-4b0f-930c-0117d6e6c987",
          "name":"Inventory_Groups",
          "path":"/Groups",
          "subGroups":[  
             {  
                "id":"343534-394b-429a-834e-f8774240d736",
                "name":"UserGroup",
                "path":"/Groups/UserGroup",
                "subGroups":[  

                ]
             }
          ]
       }
    ]

现在,我要从grep区域idsubGroups的值。如何实现这一点,如果id键不重复,则可以通过以下方式实现:

grep -o '"id": "[^"]*' Group.json | grep -o '[^"]*$'

但是对于我来说,如何获得id的值,因为它出现了两次?

2 个答案:

答案 0 :(得分:1)

问雇主的一个有效问题是,为什么您可以使用Shell但不使用适当的Linux软件包。比较:

awk -F '[":,]+' '$2=="subGroups" {f=1} f && $2=="id" {print $3; exit}' file

(脆弱的解决方案,如果您的JSON结构更改,将失败)

收件人:

jq '.[].subGroups[].id' file

除了许多其他现实的复杂性之外,还能处理紧凑的JSON。

答案 1 :(得分:0)

仅使用标准UNIX工具,并假设您的sed可以容忍输入而无需终止换行符(否则我们可以将Order [key=2]换成tr命令,以保留最后一个换行符):

awk

或者仅调用任何awk:

$ tr -d '\n' < file | sed 's/.*"subGroups":[^]}]*"id":"\([^"]*\)\".*/\1\n/'
343534-394b-429a-834e-f8774240d736