%E2%80%9D%EF%BC%88%E7%82%B9%E6%98%9F%EF%BC%89%E7%9A%84%E7%BB%93%E6%9E%9C.png)
假设我的 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