JQ查找正则表达式



我从curl输出中得到以下JSON,我需要检索主机名中有wknhost_name(主机)的数量。在下面的json中,我们有两个主机在它们的host_name中有wkn

{
"href": "http://10.10.0.10:8080",
"Hosts": {
"cluster_name": "test",
"host_name": "testmasternode.example.test.com",
"ip": "10.10.0.10"
}
}
{
"href": "http://10.10.0.10:8080",
"Hosts": {
"cluster_name": "test",
"host_name": "testwkn01.example.test.com",
"ip": "10.10.0.11"
}
}
{
"href": "http://10.10.0.10:8080",
"Hosts": {
"cluster_name": "test",
"host_name": "testwkn02.example.test.com",
"ip": "10.10.0.12"
}
}

我尝试了几种方法

  1. 没有输出
curl -sH http://10.10.0.10:8080/api/v1/clusters/test/hosts?fields=Hosts/host_name,Hosts/ip 
| jq -r '.items | .[] | select(.Hosts.host_name == ("*wkn01.*"))' 
  1. 显示错误
curl -sH http://10.10.0.10:8080/api/v1/clusters/test/hosts?fields=Hosts/host_name,Hosts/ip  
| jq -r '.items | .[] | select(.Hosts.host_name | match("*wkn01.*"))'
jq: error (at <stdin>:76): Regex failure: target of repeat operator is not specified

使用test而不是match,因为您只需要布尔结果。然后,测试是否有任何项目的host_name中有wkn。正则表达式wkn应该足够了。最后,由于需要检索host_name的编号,只需使用length来完成(它需要一个数组,因此我还将.[]更改为map)。

... | jq -r '.items | map(select(.Hosts.host_name | test("wkn"))) | length'
2

相关内容

  • 没有找到相关文章

最新更新