jq de filtros de expressões regulares ( test , match , capture ) pegue texto bruto como sua entrada. Para aplicar um regex a nomes de chaves, você primeiro terá que converter esses nomes de chave em texto.
jq fornece uma função to_entries para isso:
cat jsonfile | jq 'to_entries'
saída:
[
{
"key": "key11",
"value": 1010
},
{
"key": "key11_yes",
"value": 13
},
{
"key": "key11_no",
"value": 14
},
{
"key": "key12",
"value": 12120
},
...
]
Isso pode ser alimentado em um filtro que extrai a chave, testa-a em um regexp e, em seguida, exibe a entrada inteira ou a omite:
if (.key|test("key[0-9][0-9]$")) then ( {key: .key, value: .value } ) else empty end
A função from_entries correspondente pode converter as entradas restantes de volta ao seu formato original ou with_entries pode fazer tudo em uma etapa:
cat jsonfile|jq 'with_entries(if (.key|test("key[0-9][0-9]$")) then ( {key: .key, value: .value } ) else empty end )'
O resultado é todos os pares da entrada cujas chaves correspondem ao padrão:
{
"key11": 1010,
"key12": 12120,
"key13": 12103
}