Dado:
MY_JSON=$(cat <<EOF
{
"schema": "my.schema",
"properties": [
{
"type": "new.data",
"value": {
"labels": {
"ofasd.io/arch.amd64": "supported",
"ofasd.io/arch.arm64": "supported",
"ofasd.io/arch.ppc64le": "supported",
"ofasd.io/arch.s390x": "unsupported"
}
}
}
]
}
EOF
)
Estou tentando filtrar apenas arquiteturas "compatíveis":
arches=$(echo "$MY_JSON" | tr -d '\000-\031' | jq -r '
.properties[]
| select(.type == "new.data")
| .value.labels
| to_entries
| map(select(.key | test("^ofasd\\.io/arch\\.") and .value == "supported"))
| map(.key | sub("^ofasd\\.io/arch\\."; ""))
| join("\n")')
Saída esperada:
amd64
arm64
ppc64le
Produção real:
jq: error (at <stdin>:0): Cannot index string with string "value"
Alguém poderia me ajudar a entender o que estou fazendo errado? Parece que o problema é que a filtragem ofasd.io/arch.* não está funcionando. Quando executo:
echo "$MY_JSON" | jq -r '
.properties[]
| select(.type == "new.data")
| .value.labels
| to_entries
| map(select(.key | test("^ofasd.io/arch\\.") and .value == "supported"))'
Eu entendo:
echo "$MY_JSON" | jq -r '' failed with status 5