2016-08-12 3 views
0

AWS CLIを使用してElasticacheからシェフレシピに入れるために、最新の(最も高い番号の接頭辞)CacheClusterIdを取得しようとしています。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の書き込み:上記アレイ内の2台のJSONオブジェクトの場合

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

、それが戻ってくる:

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

答えに感謝します。それはグロスですが、シェフでこれを実行して、私が作成したすべてのボックスで遅延を評価するコマンドとして実行する必要があります。別の依存関係を追加することを嫌っています。しかし、今後のソートのためにこれを念頭に置いておきます!それは非常に強力なようです。 –

+0

@Rome_Leader申し訳ありません、それを使用してください! – hek2mgl

+0

@Rome_Leader非常に強力です! 'sed'やストリームエディタを使うよりもJSONを扱う方がはるかに良い方法です。私は有名な "正規表現付きHTMLを解析する"問題を知っていると確信しています。私は同様にストリームエディタを使ってデータ言語を解析すると思います。 –

関連する問題