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

相关内容