Regex para obter valor único do arquivo Json usando o bash

1

Gostaria de recuperar um valor "tenki-deploy-topic" do conteúdo do arquivo JSON abaixo. Eu usei este regex grep -o 'topic[^"]*' output.log , então ele recebe todos os arquivos com o tópico, em vez disso, eu quero usar outra chave, como "tenki" ou "densa".

{ "Topics": [ { "Name": "arn:aws:sns:us-west-2:123456789012:topic-freezing-deploy" }, { "Name": "arn:aws:sns:us-west-2:123456789012:topic-dense-deploy" }, { "Name": "arn:aws:sns:us-west-2:123456789012:topic-tenki-deploy" } ] }
    
por itgeek 30.07.2018 / 21:48

1 resposta

4

Usando as ferramentas típicas de CLI do Linux / Unix, como awk , sed , & grep são quase sempre o caminho errado a seguir ao tentar analisar o JSON.

Minha ferramenta goto típica para o trabalho JSON CLI no terminal é jq . Está em todos os repositórios e pode ser facilmente instalado.

Seu problema de como selecionar apenas os elementos no array Topics se torna trivial:

$ jq '.Topics[] | select(.Name | contains("topic-tenki-deploy"))' output.log 
{
  "Name": "arn:aws:sns:us-west-2:123456789012:topic-tenki-deploy"
}

Os trabalhos acima pegam os elementos da matriz .Topics[] e, em seguida, selecionam o .Name cujo valor contém topic-tenki-deploy .

Referências

por 31.07.2018 / 03:00