awkとsedの両方を使用せずに、awkを使用してbashシェルからjson値を抽出します。

awkとsedの両方を使用せずに、awkを使用してbashシェルからjson値を抽出します。

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最上位構造のキー値を解析するために使用されます。ValueParameter

aws ssm get-parameter --name /mysite/dev/email | jq -r '.Parameter.Value'

これは、JSONに格納されている値がとして返されるように、値のJSONエンコーディングをさらにデコードします。\"The Admin\" <[email protected]>"The Admin" <[email protected]>

関連情報