Eu tenho o seguinte config.json
arquivo:
{
"auths": {
"reg1.io": {
"auth": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
},
"reg2.io": {
"auth": "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"
},
"reg3.io": {
"auth": "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz"
}
}
}
Eu quero manter apenas o reg2.io
objeto para obter:
{
"auths": {
"reg2.io": {
"auth": "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"
}
}
}
Posso excluir um objeto específico com, por exemplo:
→ jq 'del(.. | ."reg2.io"? )' ./config.json
{
"auths": {
"reg1.io": {
"auth": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
},
"reg3.io": {
"auth": "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz"
}
}
}
mas e se eu quiser manter um objeto específico? Obrigado.
Usando
select()
comwith_entries()
para selecionar apenas a chave que você deseja:Parametrizado para que pegue a chave desejada da linha de comando:
Altere
==
para!=
para excluir a chave nomeada.Observe que sua própria tentativa não distingue onde a chave é encontrada no documento, o que pode causar alguma confusão no caso geral.
Apenas para adicionar um pouco mais de explicação sobre o que está acontecendo na
jq
expressão.Dentro do
with_entries()
comando, o que fica visível é o seguinte conjunto de objetos, cada um com umkey
e umavalue
chave:A
select()
chamada extrai cada objeto para o qual o teste fornecido é true e descarta o restante. Nosso teste é simplesmente "O valor dakey
chave é a stringreg2.io
?".Uma chamada para
with_entries(expr)
é equivalente ato_entries | map(expr) | from_entries
.