我正在运行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
答案 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
该命令会在最后一个斜杠/
到**