从curl -v -X POST中提取信息

时间:2017-09-28 18:15:06

标签: curl logging grep

我正在运行curl命令,如下所示:

curl -v -X POST "https://westus.api.cognitive.microsoft.com/spid/v1.0/identify?identificationProfileIds=c8f13848-b484-4e40-baac-29a5d3670ce7,8d42156a-8af9-42ac-92a1-77a95c22f3c2,408e09a8-f42f-4cb3-b24f-26c29b476150&shortAudio=true" -H "Content-Type:application/octet-stream" -H "Ocp-Apim-Subscription-Key:$apikey_SpeakerRecog" --data-binary @req.wav`

该命令调用Microsoft发言人识别API,并将我记录的.wav与我在系统上的配置文件ID进行匹配。我在它匹配的个人资料ID之后。

我得到了详细的日志,但是日志并没有告诉我接受了哪个配置文件ID,它只是说"接受"。在日志中,操作位置上有一个具有ID的条目。我需要在另一个curl命令中使用此ID,然后获取配置文件ID。

我真的很难从日志中获取此操作ID。我打算用grep来提取ID,但我很难将日志保存到文件或变量中然后使用grep。我已尝试将输出保存在文本文件中,但文本文件为空白。

我需要帮助从日志的operation-location参数中提取operationID

请参阅以下日志的一部分:

Content-Length: 160044
Expect: 100-continue

HTTP/1.1 100 Continue
  0  156k    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0} [data not shown]
HTTP/1.1 202 Accepted
Cache-Control: no-cache
Pragma: no-cache
Content-Length: 0
Expires: -1
Operation-Location: https://westus.api.cognitive.microsoft.com/spid/v1.0/operations/6cbd497c-652f-4723-b5a2-4087af4a01c9
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET

2 个答案:

答案 0 :(得分:0)

您可以使用 sed

sed -n -r 's/^.*Operation-Location:.*\/([^/]+)$/\1/p'

示例用法:

$ sed -n -r 's/^.*Operation-Location:.*\/([^/]+)$/\1/p' file
6cbd497c-652f-4723-b5a2-4087af4a01c9

现在,捕获curl:curl的输出的问题将输出写入stderr,因此您需要重定向它。此外,您应该使用选项--silent禁用进度并显示错误代码,例如:

curl -v --silent https://whatever.you.li.ke 2>&1

接下来,您可以将其传输到您的sed / grep调用中:

curl -v --silent https://whatever.you.li.ke 2>&1 | sed -n -r 's/Operation-Location:.*\/([^/]+)$/\1/p'

OR 您可以将curl命令的输出写入使用--stderr选项的文件:

curl -v --silent --stderr curl.log https://whatever.you.li.ke

并在该日志文件中释放您的grep / sed魔法。

答案 1 :(得分:0)

$ grep -oP 'https.*\/\K.*(?=\*\*)' log_file
6cbd497c-652f-4723-b5a2-4087af4a01c9

该命令会在最后一个斜杠/**

之间打印模式