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

관련 정보