jq - 选择以字符串开头的属性

Chr*_*ris 38 json jq

输入json:

[
  {
    "id": "89",
    "hostname": "abcd"
  },
  {
    "id": "89",
    "hostname": "babcd"
  }
]
Run Code Online (Sandbox Code Playgroud)

如何修改下面的过滤器以仅输出以“abcd”开头的主机名?

$ jq -r '.[]|select(.hostname | contains("abcd"))' jjjj
{
  "id": "89",
  "hostname": "abcd"
}
{
  "id": "89",
  "hostname": "babcd"
}
$ jq -r '.[]|select(.hostname | contains("^abcd"))' jjjj
$
Run Code Online (Sandbox Code Playgroud)

Chr*_*ris 57

解决方案:

jq -r '.[]|select(.hostname | startswith("abcd"))' jjjj
Run Code Online (Sandbox Code Playgroud)

  • 如果您需要输出为数组,那么您应该使用“map”。示例:`jq 'map( select(.hostname |startswith("abcd") ) )'`。然后您只需使用“|”即可选择第一个匹配项 首先` (4认同)
  • 既然我们正在讨论这个主题,那么您也可以使用 `contains("xyz")`,如果您喜欢的话。:D (3认同)
  • 对于任何想知道的人,如果这是您要检查的内容,您也可以使用 `endswith()` (2认同)