2016-08-12 93 views
0

我試圖從我的Elasticache中使用AWS CLI獲取最新(最高號碼前綴)CacheClusterId,以便將其放入Chef配方中。這是我到目前爲止有:Bash在排序後解析JSON名稱

aws elasticache describe-cache-clusters --region us-east-1 | grep CacheClusterId | sort -t : -rn 

主要生產:

"CacheClusterId": "xy112-elasticache" 
"CacheClusterId": "xy111-elasticache" 
"CacheClusterId": "xy110-elasticache" 
"CacheClusterId": "xy109-elasticache" 
"CacheClusterId": "xy-elasticache" 

我如何可以隔離只是 「xy112-elasticache」 部分(減去引號)?閱讀手冊頁進行排序,我覺得它需要一個-k選項,但我無法解決詳細情況。

回答

0

由於第一部分的都是一樣,我將只是削減,並採取ID參與方式如下:

aws elasticache describe-cache-clusters --region us-east-1 | grep CacheClusterId | cut -d'"' -f4 
+0

有趣。我是否也可以使用剪切來抓取最高記錄?這是我感興趣的唯一一個。現在,我的輸出與上面(多條記錄)相同,但沒有CacheClusterId部分和引號。 –

+1

如果它始終是最高記錄,您可以將結果剪切到'head -n 1' – Fma

1

我想一個更好的方法是使用jq處理JSON。要安裝在Debian:

sudo apt-get install jq 

我不知道你的JSON看起來像什麼,但基於對aws elasticache describe-cache-clusters命令this XML example響應,如果你的JSON響應看起來像:

{ 
    "CacheClusters": [ 
    { "CacheClusterId": "xy112-elasticache" , ... }, 
    { "CacheClusterId": "xy111-elasticache" , ... }, 
    ... 
    ] 
} 

那麼你「d寫:

aws elasticache describe-cache-clusters --region us-east-1 | jq ".CacheClusters[].CacheClusterId" 

對於上面的陣列中的兩個JSON對象,它會返回:

"xy112-elasticache" 
"xy111-elasticache" 
+0

感謝您的回答。總而言之,我需要在Chef中運行這個命令來懶惰地評估我創建的所有框,並且我不願添加其他依賴項,因此選擇了bash路由。不過,我會記住這一點,以便將來進行分類。它看起來非常強大。 –

+0

@Rome_Leader沒有任何藉口,使用它! – hek2mgl

+0

@Rome_Leader它非常強大!處理JSON比使用'sed'或任何流編輯器更好的方法;我相信你知道着名的「用正則表達式解析HTML」這個問題,我認爲類似地使用流編輯器來解析數據語言。 –