Bash正则表达式在JSON结构上的匹配

时间:2019-06-11 21:23:44

标签: json regex bash

我有一个像这样的JSON结构,我已经将它作为字符串读入了bash变量中:

{
        "elem1": "val1",
        "THEELEM": "THEVAL",
        "elem3": "val3"
}

我想使用正则表达式在"THEELEM": "THEVAL"上进行匹配。如果我尝试将单词以JSON形式存储在result中的单个单词,则可以使用它:

[[ $result =~ THEVAL ]] && echo "yes"

但是我想在像这样的密钥对上匹配:

[[ $result =~ "THEELEM": "THEVAL" ]] && echo "yes"

这给了我语法问题。我尝试转义,单引号和三引号无济于事。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

您可以创建变量$ expr来保存要匹配的字符串,然后将其用于正则表达式。

expr='"THEELEM": "THEVAL"'
[[ $result =~ $expr ]] && echo "yes"

受此stack overflow post

的启发

答案 1 :(得分:1)

报价对我有用。

[[ $result =~ '"THEELEM": "THEVAL"' ]] && echo "yes"

请注意,引用模式会禁用特殊正则表达式字符的识别,而只是搜索文字子串。在这里这不是问题,因为您没有任何通配符或其他非文字模式字符。但是,如果这样做了,就必须将模式放在变量中,就像@noah的答案一样。