我有以下 Bash 中 POST 方法的 Json 响应,并希望在之后捕获值会话ID”:”并将其分配给变量会话 ID。
{"changeId":"79911476-53a4-46e1-8ffd-422436b51ad1","changeType":"已创建","记录":{"key":"159.65.198.219"}},{"changeId":"bd52dcbd-a5ab-4557-b2b8-88793c2d2964","changeType":"已创建","记录":{"key":"161.35.111.167"}},{"changeId":"f4f5c94e-6c06-473c-b810-b7bbd69c71ad","changeType":"已创建","记录":{"key":"161.35.123.111"}}],“会话ID”:“b7305d77-20f1-4d57-9eb1-9b9fb4f9552d”}
#API 调用
request_post="$(curl --insecure --request POST "endpoint_URL")"
回显$request_post
我需要帮助完成以下步骤
#从响应中剪切出 sessionId
会话 ID=
答案1
虽然解析 json 结构应该由 json 解析器完成,但是像这样的简单情况可以用简单的工具来完成,并且您可以通过管道传输答案sed
,例如:
sed 's/.*"sessionId":"\([^"]*\).*/\1/'
\______________/ \___/ \/
A B C
A 匹配 之前的所有内容,包括"sessionId":"
,B 匹配 之后的所有非"
,即实际的 sessionId,C 匹配该行的其余部分。B 包含在 中\(\)
,因此可以在替换中将其引用为\1
。因此整行仅由 sessionId 替换。
当然,如果输出可以分成几行或者使用 json 格式允许的其他变体,脚本就会变得更加复杂。