You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shell脚本中提取manifest.json内us-east-1对应的AMI ID

提取指定区域的AMI ID解决方案

现有manifest.json内容如下:

{
  "builds": [
    {
      "name": "golden-image",
      "builder_type": "amazon-ebs",
      "build_time": 1689613460,
      "files": null,
      "artifact_id": "us-east-1:ami-1234567890abc,us-west-2:ami-0987654321abc",
      "packer_run_uuid": "test-uuid",
      "custom_data": null
    }
  ]
}

当前通过以下命令获取到的AMI_ID变量值为"us-east-1:ami-1234567890abc,us-west-2:ami-0987654321abc":

export AMI_ID=$(cat manifest.json| jq -r '.builds[0].artifact_id')

需求:仅提取us-east-1对应的AMI值,以下是几种可行方案:

方法一:用jq直接解析处理(推荐)

无需先导出AMI_ID变量,直接通过jq的字符串处理能力一步得到目标值:

export US_EAST_1_AMI=$(cat manifest.json | jq -r '.builds[0].artifact_id | split(",")[] | select(startswith("us-east-1:")) | ltrimstr("us-east-1:")')

解释:将artifact_id按逗号拆分后,筛选出以us-east-1:开头的项,再去掉前缀得到纯AMI ID

方法二:基于已有AMI_ID变量处理

如果已经导出了AMI_ID变量,可通过以下shell工具实现提取:

用awk处理

echo "$AMI_ID" | awk -F ',' '{for(i=1;i<=NF;i++) if($i ~ /^us-east-1:/) {sub(/us-east-1:/,"",$i); print $i}}'

用sed处理

echo "$AMI_ID" | sed -n 's/.*us-east-1:\([^,]*\).*/\1/p'

解释:通过正则匹配捕获us-east-1:之后、下一个逗号之前的内容

用grep处理(需支持Perl正则)

echo "$AMI_ID" | grep -oP 'us-east-1:\K[^,]+'

解释:\K用于忽略前面匹配的us-east-1:,仅输出后续到逗号前的内容

内容的提问来源于stack exchange,提问作者CloudEnthusiast

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 02:52:09