Linux CLI-如何从JSON jq + grep获取子字符串?

Ado*_*oyt 6 bash grep json pathname jq

我需要从JSON中提取一个子字符串。在下面的JSON文档中,我需要值的末尾。jq '.[].networkProfile.networkInterfaces[].id' 换句话说,我只A10NICvw4konls2vfbw-data需要传递给另一个命令即可。我似乎无法弄清楚如何使用grep拉子字符串。我似乎有正则表达式的例子,但没有成功。

[
  {
    "id": "/subscriptions/blah/resourceGroups/IPv6v2/providers/Microsoft.Compute/virtualMachines/A10VNAvw4konls2vfbw",
    "instanceView": null,
    "licenseType": null,
    "location": "centralus",
    "name": "A10VNAvw4konls2vfbw",
    "networkProfile": {
      "networkInterfaces": [
        {
          "id": "/subscriptions/blah/resourceGroups/IPv6v2/providers/Microsoft.Network/networkInterfaces/A10NICvw4konls2vfbw-data",
          "resourceGroup": "IPv6v2"
        }
      ]
    }
  }
]
Run Code Online (Sandbox Code Playgroud)

pea*_*eak 6

就您而言,sub(".*/";"")因为*是贪婪,所以可以解决问题:

.[].networkProfile.networkInterfaces[].id | sub(".*/";"")
Run Code Online (Sandbox Code Playgroud)


Mar*_*eed 5

尝试这个:

jq -r '.[]|.networkProfile.networkInterfaces[].id | split("/") | last'
Run Code Online (Sandbox Code Playgroud)

-r告诉JQ打印在“原始”的形式输出-在这种情况下,周围的字符串值,意味着没有双引号。

至于jq表达式,在你访问id你想要的之后,管道它(仍然在里面jq)通过split("/")将它变成一个斜线之间的部分的数组。通过last函数传递它(谢谢,@Thor)只返回数组的最后一个元素。