curl 的用法指南

Shell使用grep和sed命令提取json数据中指定字段的值

今天需要做两个定时任务,通过jenkins 定时去调用某个服务的几个接口。在获取token的接口中,返回的结果并不是所需要的那种格式,需要通过文本处理将token解析出来再带上此token 去访问另外一个接口。

Curl 请求(GET)

以 GET 方式请求数据

curl -G -d 'url=xxx' http://xxx/xxx

通过 GET 的方式获取到返回的token

{
    "code":0,
    "message":"OK",
    "data":{
        "token":"xxx.xxx.xxx"
    }
}

提取指定文本最终的命令

cat result.json | sed 's/,/\n/g' | grep "token" | sed 's/:/\n/g' | sed '1d' | sed 's/}//g' | sed '1d'| sed 's/"//g'

Sed + grep 解析文本获取token

第一个sed是将 , 换成 \n

{
    "code":0
    "message":"OK"
    "data":{
        "token":"xxx.xxx.xxx"
    }
}

第二个grep 是将 token 关键字找出来,并单独列出来

"data":{"token":"xxx.xxx.xxx"}}

第三个 sed是将 : 换成 \n

"data"
{"token"
"xxx.xxx.xxx"}}

第四个sed 是删除第一行

{"token"
"xxx.xxx.xxx"}}

第五个sed是将 } 替换为空字符

{"token"
"xxx.xxx.xxx"

第六个sed是删除第一行

"xxx.xxx.xxx"

第五个sed是将 " 用空字符替换掉,最后的g的参数表示替换所有符合的引号

xxx.xxx.xxx

将token保存下来

token=(cat result.json | sed 's/,/\n/g' | grep "token" | sed 's/:/\n/g' | sed '1d' | sed 's/}//g' | sed '1d'| sed 's/"//g')

Curl 请求(POST)

带上刚解析出来的token去访问另外一个接口

public RestApiResult saveXxx(@RequestParam String accessToken,
                                               @RequestParam String storeId,
                                               @RequestParam String type)

再通过curl的 post请求 就可以访问该接口了

curl -d 'storeId=xxx&accessToken='$token'&type=xxx' http://xxx/xxx
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐