function getVal {
sedPattern='s/^.*"keyVal":"\([^"]*\)".*$/\1/'
finalSedPattern=${sedPattern/keyVal/$2}
echo $(sed $finalSedPattern <<< $1)
}
Run Code Online (Sandbox Code Playgroud)
这是我使用sed
. 它接受 json 字符串、键名并返回如下值:
myJson='{"hello":"sk"}'
val=$(getVal $myJson hello)
echo $val
Run Code Online (Sandbox Code Playgroud)
印刷,sk
但有时,我的 json 字符串可能包含也可能不包含空格,因为,
myJson='{"hello" : "sk"}'
Run Code Online (Sandbox Code Playgroud)
在这种情况下,该功能将失败。我尝试通过添加[ ]
匹配零个或多个空格来调整上述模式,
sedPattern='s/^.*"keyVal"[ ]+:"\([^"]*\)".*$/\1/'
Run Code Online (Sandbox Code Playgroud)
它会抛出错误,
unterminated `s' command
Run Code Online (Sandbox Code Playgroud)
我如何在 sed 中提供非捕获模式组?
您的sedPattern
报价有一些问题。您正在尝试将同一个引用匹配两次。另外,+ 用于表示一个或多个。对于 0 个或多个,使用 *。
注意:下面的代码未经测试,但应该可以帮助您继续。
sedPattern='s/^.*"keyVal"[ ]*:.*\(".*"\).*$/\1/'