我有一个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
区域id
键subGroups
的值。如何实现这一点,如果id
键不重复,则可以通过以下方式实现:
grep -o '"id": "[^"]*' Group.json | grep -o '[^"]*$'
但是对于我来说,如何获得id
的值,因为它出现了两次?
答案 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