【问题标题】:parse JSON to jq to get a list from AWS CLI将 JSON 解析为 jq 以从 AWS CLI 获取列表
【发布时间】:2017-10-19 14:51:26
【问题描述】:

我想获得一个任务定义列表,我可以通过 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"
    ]
}

从这里我只想展示;

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

我相信如果我将它发送给jq,那么我可以得到我想要的东西吗?我正在尝试各种组合; aws ecs list-task-definitions --region eu-west-1 | jq -r '.taskDefinitionArns[].<something_here>'无济于事

【问题讨论】:

    标签: aws-cli jq


    【解决方案1】:

    试试这个:

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

    扩展:

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

    【讨论】:

    • 使用“5”解析看起来很脆弱。样本数据表明提取最后一个“:”分隔的组件可能不那么脆弱,例如拆分(“:”)[-1]
    • 查看ListTaskDefinitionsAmazon Resource Name (ARN) 文档还不清楚。我会假设这里使用的 ARN 格式是“arn:partition:service:region:account-id:resourcetype:resource”,但也可以是“arn:partition:service:region:account-id:resourcetype/resource” (其中“资源”包含一个“:”)所以RomanPerekhrest's answer实际上可能比这个更好。
    【解决方案2】:

    带有jq match功能:

    aws ecs list-task-definitions --region eu-west-1 \
    | jq -r '.taskDefinitionArns[] | match(".*/([^:]+):[0-9]+$").captures[0].string'
    
    • ".*/([^:]+):[0-9]+$" - 正则表达式模式匹配/ 和最后一个: 字符之间的序列

    输出:

    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)

    【讨论】:

    • 太棒了!请问你这功夫是从哪里学来的?你能给我指一个可以更好地解释它的网站吗?
    • @eekfonky,欢迎。查看官方jq手册stedolan.github.io/jq/manual/v1.5
    【解决方案3】:

    获取唯一值:

    aws ecs list-task-definitions | jq -r '.taskDefinitionArns[] | match(".*/([^:]+):[0-9]+$").captures[0].string' | sort | uniq
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-21
      • 1970-01-01
      • 1970-01-01
      • 2014-05-07
      • 2020-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多