阿里雲 CLI 命令的返回結果為 JSON 格式。通過 --cli-query 選項可使用 JMESPath 運算式提取特定欄位(輸出仍為 JSON),通過 --output 選項可將結果轉為表格顯示。兩者也可組合使用:先過濾,再表格化。
使用本文中的命令前,需要先安裝並配置阿里雲 CLI。具體操作,請參見安裝/更新阿里雲 CLI 和配置與管理身份憑證。
使用 --cli-query 過濾 JSON 輸出
--cli-query 選項接受 JMESPath 運算式,過濾 API 返回的 JSON 結果。輸出仍為 JSON 格式,適合在指令碼中使用或通過 jq 等工具進一步處理。
基本文法:
aliyun <product> <operation> --cli-query "<JMESPath運算式>"以下樣本均基於 ECS describe-instances 的返回結果,示範常見過濾用法。
樣本一:提取單個欄位列表
提取所有執行個體的 InstanceId。
aliyun ecs describe-instances --biz-region-id cn-hangzhou --cli-query "Instances.Instance[].InstanceId"返回結果樣本:
[
"i-1234567891234567****",
"i-abcdefghijklmnop****"
]樣本二:提取多個欄位
同時提取 InstanceId 和 Status 兩個欄位。
aliyun ecs describe-instances --biz-region-id cn-hangzhou --cli-query "Instances.Instance[].[InstanceId,Status]"返回結果樣本:
[
[
"i-1234567891234567****",
"Stopped"
],
[
"i-abcdefghijklmnop****",
"Running"
]
]樣本三:條件過濾
僅返回狀態為 Running 的執行個體 ID。
aliyun ecs describe-instances --biz-region-id cn-hangzhou --cli-query "Instances.Instance[?Status=='Running'].InstanceId"返回結果樣本:
[
"i-abcdefghijklmnop****"
]樣本四:重塑輸出結構
使用 JMESPath 的多選雜湊表達式,將返回結果重新組織為自訂鍵名的對象數組。
aliyun ecs describe-instances --biz-region-id cn-hangzhou --cli-query "Instances.Instance[].{id:InstanceId,status:Status}"返回結果樣本:
[
{
"id": "i-1234567891234567****",
"status": "Stopped"
},
{
"id": "i-abcdefghijklmnop****",
"status": "Running"
}
]以上樣本僅覆蓋常用文法。JMESPath 還支援管道運算式、內建函數等進階功能,完整文法請參見 JMESPath Tutorial。
如果 --cli-query 返回 null,請檢查運算式中的欄位名是否與 API 返回的 JSON 鍵名完全一致(區分大小寫)。
選型指引
根據使用情境選擇合適的選項:
情境 | 適用選項 | 說明 |
在指令碼中提取特定值 |
| 輸出為 JSON,方便 |
在終端中快速探索資料 |
| 表格形式更易讀 |
先過濾資料再表格化顯示 | 兩者組合使用 |
|
--output 選項欄位說明
阿里雲 CLI 提供 --output 選項,用於提取返回結果中的指定欄位並以表格形式輸出。
--output 選項包含以下欄位:
欄位名 | 描述 | 樣本值 |
cols | 表格列名。 使用
|
|
rows | 表格行資料的來源路徑,使用 JMESPath 文法指定 JSON 結果中的資料位元置。 | rows="Instances.Instance[]" |
num | 開啟行號顯示。 設定為 | num="true" |
過濾樣本
樣本情境
阿里雲產品的查詢介面會返回 JSON 結構化資料,不方便閱讀。
以查詢所有 ECS 執行個體資訊為例,執行如下命令。
aliyun ecs describe-instances --biz-region-id cn-hangzhou系統顯示類似如下輸出結果(部分省略)。
{ "PageNumber": 1, "TotalCount": 2, "PageSize": 10, "RequestId": "2B76ECBD-A296-407E-BE17-7E668A609DDA", "Instances": { "Instance": [ { "ImageId": "ubuntu_16_0402_64_20G_alibase_20171227.vhd", "InstanceTypeFamily": "ecs.xn4", "VlanId": "", "InstanceId": "i-1234567891234567****", "Status": "Stopped", "SecurityGroupIds": { "SecurityGroupId": [ "sg-bp12345678912345****", "sg-bp98765432198765****" ] } }, { "ImageId": "ubuntu_16_0402_64_20G_alibase_20171227.vhd", "InstanceTypeFamily": "ecs.xn4", "VlanId": "", "InstanceId": "i-abcdefghijklmnop****", "Status": "Running", "SecurityGroupIds": { "SecurityGroupId": [ "sg-bp1abcdefghijklm****", "sg-bp1zyxwvutsrqpon****" ] } } ] } }
樣本一
執行如下命令,過濾樣本情境返回結果中的欄位
RequestId。該欄位作為根項目,無需指定rows欄位。aliyun ecs describe-instances --biz-region-id cn-hangzhou --output cols=RequestId系統顯示類似如下輸出結果。
RequestId --------- 2B76ECBD-A296-407E-BE17-7E668A609DDA
樣本二
執行如下命令,過濾樣本情境返回結果中的欄位
InstanceId以及Status。這兩個欄位所在的 JMESPath 路徑為Instances.Instance[],因此指定rows="Instances.Instance[]"。具體 JMESPath 書寫方法,請參見 JMESPath Tutorial。aliyun ecs describe-instances --biz-region-id cn-hangzhou --output cols="InstanceId,Status" rows="Instances.Instance[]"系統顯示類似如下輸出結果。
InstanceId | Status ---------- | ------ i-12345678912345678123 | Stopped i-abcdefghijklmnopqrst | Running如果需要輸出行號,則指定
num=true,系統顯示類似如下輸出結果。Num | InstanceId | Status --- | ---------- | ------ 0 | i-12345678912345678123 | Stopped 1 | i-abcdefghijklmnopqrst | Running
樣本三
執行如下命令,過濾樣本情境返回結果中的數群組類型欄位
SecurityGroupId的具體元素。數組所在的 JMESPath 路徑為Instances.Instance[].SecurityGroupIds.SecurityGroupId。aliyun ecs describe-instances --biz-region-id cn-hangzhou --output cols="sg1:0,sg2:1" rows="Instances.Instance[].SecurityGroupIds.SecurityGroupId"系統顯示類似如下輸出結果。
sg1 | sg2 --- | --- sg-bp11234567891234**** | sg-bp19876543219876**** sg-bp1abcdefghijklm**** | sg-bp1zyxwvutsrqpon****