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