Linux 使用Sed或awk从curl响应中解析JSON,并将其分配给变量以供以后使用

Linux 使用Sed或awk从curl响应中解析JSON,并将其分配给变量以供以后使用,linux,unix,curl,awk,sed,Linux,Unix,Curl,Awk,Sed,我正在编写一个在linux设备上运行的bash脚本,因此我没有安装jq的权限,我需要能够使用本机linux工具 curl --location --request POST "https://api-mp.meraki.com/api/v1/networks/12345/switch/stacks/12345/routing/interfaces" \ --header "X-Cisco-Meraki-API-Key: 123key" \ --he

我正在编写一个在linux设备上运行的bash脚本,因此我没有安装jq的权限,我需要能够使用本机linux工具

curl --location --request POST "https://api-mp.meraki.com/api/v1/networks/12345/switch/stacks/12345/routing/interfaces" \
  --header "X-Cisco-Meraki-API-Key: 123key" \
  --header "Content-Type: application/json" \
  --data '{
    "name": "L3 int",
    "subnet": "192.168.249.0/24",
    "interfaceIp": "192.168.249.2",
    "multicastRouting": "disabled",
    "vlanId": 140,
    "ospfSettings": {
        "area": "0",
        "cost": 1,
        "isPassiveEnabled": true
    }
}'  | sed -n 's|.*"interfaceID":"\([^"]*\)".*|\1|p' > $newVar
服务器的响应返回以下内容:

{
"interfaceId": "12345",
"name": "PA L3 DR Int",
"subnet": "192.168.249.0/24",
"interfaceIp": "192.168.249.2",
"multicastRouting": "disabled",
"vlanId": 140,
"ospfSettings": {
    "area": "0",
    "cost": 1,
    "isPassiveEnabled": true
}
}

然后,我需要能够访问查询字符串参数中的interfaceID新变量

您刚刚在
interfaceID
中得到了错误的大小写(
ID
vs
ID
),并且忘记了
之后的空格,但是您很接近:

$ sed -n 's|.*"interfaceId": *"\([^"]*\)".*|\1|p' file
12345
使用
cat file
代替
curl
命令显示如何将其保存到变量,以防您不知道:

$ var=$(cat file | sed -n 's|.*"interfaceId": *"\([^"]*\)".*|\1|p')
$ echo "$var"
12345

您刚刚把案例搞错了(
ID
vs
ID
interfaceId
中),忘记了
后面的空格:
,但您很接近:

$ sed -n 's|.*"interfaceId": *"\([^"]*\)".*|\1|p' file
12345
使用
cat file
代替
curl
命令显示如何将其保存到变量,以防您不知道:

$ var=$(cat file | sed -n 's|.*"interfaceId": *"\([^"]*\)".*|\1|p')
$ echo "$var"
12345

你能试试下面的吗。在link中测试成功


你能试试下面的吗。在link中测试成功