2017-01-03 9 views
0

aws ec describe-instancesを介して解析しているAWSインスタンスのグループがあります。 IPが'10 .10 'で始まらないすべてのレコードを整理しようとしています。JQ文字列と一致しない項目を選択します。

aws ec2 describe-instances --no-paginate --filter "Name=instance-state-name,Values=running" --query 'Reservations[].Instances[].{Private:PrivateIpAddress,PublicDNS:PublicDnsName,PublicIP:PublicIpAddress}' | jq '.[] | select(.Private | contains("10.10"))' 

これは私が私が望むものとまったく逆のものになります。私は何らかの形でインクルードを否定できるはずですが論理的には思えますが、私はドキュメンテーションや実験を通してそれを収集することはできませんでした。私のjqの熟練度は中途半端なので、ここで間違った演算子や関数を使用しているかもしれません。

私はこの特定のjq質問への回答が好きですが、--queryスイッチを使用してJMESPathを使用しても同じ結果が得られます。

+0

select述語の末尾に 'not 'を追加するだけです。 –

+0

申し訳ありませんが、私は構文がどうあるべきかはよくわかりません。あなたは詳しく説明できますか?私はいくつかの異なる場所に "not"を追加しようとしましたが、私はjqコンパイルエラーを受けています。 –

+0

'select(.Private | contains(" 10.10 ")| not)'おそらく[startswith/1'](https://stedolan.github.io/jq/manual/#startswith(str))をあなたが特に文字列の先頭にそれを望んでいないからです。 –

答えて

0

ジェフ・マルカド氏のコメントは、完全な本格的な回答として書いていただければ受け入れられます。その間、私はJQにそれをやろうと壁を打ったので、AWSの--query構文を試してみました。

これは10.10で始まるオブジェクトだけを捕まえるので、少し上手かもしれませんが、上記のjqは10.10を含むオブジェクトを捕捉するので、10.100などです。または110.100などが...通過します。これは、jqで "starts_with"と似た演算子がないと仮定しています。おそらくそこにあります。それにもかかわらず、私はこれを私の最終目標のために働き、ある時点で他の誰かに役立つかもしれないので、ここに入れています。

aws ec2 describe-instances \ 
    --no-paginate --filter "Name=instance-state-name,Values=running" \ 
    --query 'Reservations[].Instances[?starts_with(PrivateIpAddress, `10.10.`) == `false`]' | 
    jq '.[] | .[] | {PrivateIpAddress, PublicIpAddress, PublicDnsName}' 
+0

上記のJeffの答えは、実際に "startswith"が存在すると述べています。だからそれがある。もう一度おねがいします@ジェフ・メルカド –

関連する問題