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
}