【发布时间】:2019-06-24 10:26:18
【问题描述】:
我有一个 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 来自 subGroups 区域的键 id 的值。如何实现这一点,如果id 键不重复,则可以通过以下方式实现:
grep -o '"id": "[^"]*' Group.json | grep -o '[^"]*$'
但在我的情况下,我如何才能获得出现两次的 id 的值?
【问题讨论】:
-
不要用正则表达式解析 JSON(再次)!
-
不鼓励我们回答有关使用基于行的实用程序解析结构化数据(YAML、JSON 等)的问题。请查看
jq以获取基于 shell 的 JSON 解析。 -
@Biffen jq 在我的情况下不能使用,因为它没有安装在客户端机器上,对我来说它限制在 linux 机器上安装任何新包。
-
最直接的问题是您希望冒号后面有一个空格,但这只是尝试使用正则表达式解析 JSON 时的许多问题之一。即使你解决了这个问题,并且得到了一些碰巧可以工作的东西,一旦 JSON 发生轻微变化,它也有很大的风险会停止工作。
-
@SubodhJoshi 在询问如何仅使用标准 UNIX 工具(例如 grep、sed、awk)解析 JSON 或 XML 或任何其他语言时,在您的问题中说明您只能访问标准非常重要UNIX 工具,不能安装其他任何东西。这样一来,人们就可以使用那些标准的 UNIX 工具回答您而不会被否决,而且您也不会得到一堆相关的 cmets 和 downvotes。