Bashスクリプト - grep正規表現から「(.*)」(点線アスタリスク)結果を取得する

Bashスクリプト - grep正規表現から「(.*)」(点線アスタリスク)結果を取得する

Bashスクリプト変数に次のJSON文字列があるとしますDATA

{
    "id": 10,
    "name": "Person 1",
    "note": "This is a test"
}

nameこのフィールドの値を取得する必要があります。私はgrepこれを使用しました:

NAME=$(echo "$DATA" | grep -E "\"name\": \"(.*)\"")

しかし、これが再び戻ります"name": "Person 1"。私はする必要がありますPerson 1。どのように結果を得ることができますか(.*)

答え1

以下を使用すると、簡単にこれを行うことができますjq

$ DATA='{
    "id": 10,
    "name": "Person 1",
    "note": "This is a test"
}'
$ jq -r '.name' <<<"$DATA"
Person 1

通常、html、json、yamlなどの構造化データを解析するために正規表現を使用しないことをお勧めします。

grepでこれを行うには、PCREを使用してプレビューと振り返りを利用する必要があります。

$ echo $DATA | grep -Po '(?<="name": ").*(?=")'
Person 1

関連情報