2017-10-19 3 views
3

Je voudrais obtenir une liste de définitions de tâches Je peux créer une liste à partir de via AWS CLI. Voici une liste partielle de la commande;analyser JSON en jq pour obtenir une liste de AWS CLI

aws ecs list-task-definitions --region eu-west-1

{ 
    "taskDefinitionArns": [ 
     "arn:aws:ecs:eu-west-1:543573289192:task-definition/audience-view-dev-api:4", 
     "arn:aws:ecs:eu-west-1:543573289192:task-definition/audience-view-dev-groups:4", 
     "arn:aws:ecs:eu-west-1:543573289192:task-definition/audience-view-dev-groups:5", 
     "arn:aws:ecs:eu-west-1:543573289192:task-definition/audience-view-dev-mock-api:1", 
     "arn:aws:ecs:eu-west-1:543573289192:task-definition/audience-view-dev-mock-responder:1" 
    ] 
} 

De cela, je voudrais montrer que;

audience-view-dev-api 
audience-view-dev-groups 
audience-view-dev-groups 
audience-view-dev-mock-api 
audience-view-dev-mock-responder 

Je crois que si je conduit à ce jq je peux obtenir ce que je suis après? J'essaie différentes combinaisons de; aws ecs list-task-definitions --region eu-west-1 | jq -r '.taskDefinitionArns[].<something_here>' sans succès

Répondre

3

Essayez ceci:

$ aws ecs list-task-definitions --region eu-west-1 \ 
    | jq -Mr '.taskDefinitionArns[] | split(":")[5] | split("/")[1]' 

ELARGI:

.taskDefinitionArns[]  # for each taskDefinitionArns 
| split(":")[5]    # take entry [5] after splitting by : 
| split("/")[1]    # take entry [1] after splitting by/
+0

L'analyse en utilisant" 5 "semble fragile. Les données de l'échantillon suggèrent qu'il pourrait être moins fragile pour extraire le dernier composant délimité ":", par ex. split (":") [- 1] – peak

+0

En regardant [ListTaskDefinitions] (http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ListTaskDefinitions.html) et [Amazon Resource Name (ARN)] (http : //docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) docs ce n'est pas clair. J'aurais supposé que le format ARN en jeu ici est "arn: partition: service: région: compte-id: resourcetype: ressource" mais il pourrait aussi être "arn: partition: service: région: compte-id: resourcetype/ressource" (où "resource" contient un ":") donc [la réponse de RomanPerekhrest] (https://stackoverflow.com/a/46833048/8379597) pourrait être meilleure que celle-ci. – jq170727

3

Avec jqmatch fonction:

aws ecs list-task-definitions --region eu-west-1 \ 
| jq -r '.taskDefinitionArns[] | match(".*/([^:]+):[0-9]+$").captures[0].string' 
  • ".*/([^:]+):[0-9]+$" - motif regex pour correspondre à la séquence entre / et les derniers caractères :

La sortie:

audience-view-dev-api 
audience-view-dev-groups 
audience-view-dev-groups 
audience-view-dev-mock-api 
audience-view-dev-mock-responder 

https://stedolan.github.io/jq/manual/v1.5/#match(val),match(regex;flags)

+0

Incroyable !! Puis-je vous demander où vous avez appris ce kung fu? Pouvez-vous me désigner un site (s) qui pourrait l'expliquer mieux? – eekfonky

+0

@eekfonky, bienvenue. Consultez le manuel 'jq' officiel https://stedolan.github.io/jq/manual/v1.5/ – RomanPerekhrest