APi*_*als 4 grep shell-script regular-expression
假设我在 Bash 脚本变量中有以下 JSON 字符串DATA:
{
"id": 10,
"name": "Person 1",
"note": "This is a test"
}
Run Code Online (Sandbox Code Playgroud)
我需要获取该name字段的值。我用过grep这样的:
NAME=$(echo "$DATA" | grep -E "\"name\": \"(.*)\"")
Run Code Online (Sandbox Code Playgroud)
但是,这将返回"name": "Person 1"。我需要Person 1。我怎样才能得到结果(.*)?
你可以很容易地做到这一点jq:
$ DATA='{
"id": 10,
"name": "Person 1",
"note": "This is a test"
}'
$ jq -r '.name' <<<"$DATA"
Person 1
Run Code Online (Sandbox Code Playgroud)
一般来说,解析html、json、yaml等结构化数据时最好避免使用正则表达式。
要使用 grep 完成此操作,您需要使用 PCRE 来利用前瞻和后视:
$ echo $DATA | grep -Po '(?<="name": ").*(?=")'
Person 1
Run Code Online (Sandbox Code Playgroud)