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