aws コマンドは、json 文字列を bash シェル内の標準出力に返します。
$ aws ssm get-parameter --name /mysite/dev/email
{
"Parameter": {
"Name": "/mysite/dev/email",
"Type": "String",
"Value": "[email protected]",
"Version": 1
}
}
引用符なしで「Value」の値を返したいです。私はawkとsed Linuxプログラムを組み合わせて使用しました。デフォルトでは、awkは入力内のすべての行を検索して、一致する値を持つ行を返すことができます。 awkはファイルを1行ずつスキャンして行をフィールドに分割し、一致するパターンに対して操作を実行できるようにするため、まず次のことを行いました。
$ aws ssm get-parameter --name /mysite/dev/email | awk -F: '/Value/ {print $2}'
"[email protected]",
ご覧のとおり、私はFフラグを介して区切り記号として:を使用しています。 「Value」という文字列と行を一致させ、区切り文字列の2番目の部分である「値」を印刷します。[Eメール保護]」、
しかし、引用符とカンマは歓迎されません。したがって、引用符とコンマを置き換えるには、sedと-Eの正規表現フラグを使用する必要がありました。
$ aws ssm get-parameter --name /mysite/dev/email | awk -F: '/Value/ {print $2}' | sed -E 's/"|",//g'
[email protected]
欲しい結果が出ましたが、awkをsedにリンクする代わりにawkを使用したいと思います。可能ですか?
答え1
1行の場合は削除してください。みんなまず、カンマと引用符があります。
awk '/Value/ { gsub(/[",]/,""); print $2}'
awk | sedパイプのより良い翻訳は次のとおりです。
awk '/Value/ { gsub(/[",]/,"",$2); print $2}'
2番目のフィールドの値のみが変更されます。
答え2
jq
最上位構造のキー値を解析するために使用されます。Value
Parameter
aws ssm get-parameter --name /mysite/dev/email | jq -r '.Parameter.Value'
これは、JSONに格納されている値がとして返されるように、値のJSONエンコーディングをさらにデコードします。\"The Admin\" <[email protected]>
"The Admin" <[email protected]>