首页 > 解决方案 > 从 bash 中的输出流中提取特定值

问题描述

我有这个命令:

`curl -X POST https://server.domain.com/v2/jobs/$job_ID/runs?project_id=$project_ID -H "Content-Type: application/json" -H "Authorization: Bearer ${token}"  -d "{ \"job_run\": {} }"

它给出了这个输出

作业执行的响应是 {"metadata":{"rov":{"mode":0,"collaborator_ids":{}},"project_id":"aff59748-260a-476e-9578-b4f4a93e7a92","sandbox_id" :"aff59748-260a-476e-9578-b4f4a93e7a92","用法":{"last_updated_at":"2021-02-12T00:31:19Z","last_updater_id":"1000331040","last_update_time":1613089879840,"last_accessed_at ":"2021-02-12T00:31:19Z","last_access_time":1613089879840,"last_accessor_id":"1000331040","access_count":0},"name":"笔记本作业","description":"" ,"tags":[],"asset_type":"job_run","origin_country":"us","rating":0,"total_ratings":0,"catalog_id":"d47cd45c-0161-4b89-ba4f-c0e48272f08e","created":1613089879840,"created_at":"2021-02-12T00:31:19Z","owner_id":"1000331040" ,"size":0,"version":2,"asset_state":"available","asset_attributes":["job_run"], "asset_id":"5d9dae4e-0dfe-4e53-9e56-18a4bb44af"5d9dae4e-0dfe-4e53-9e56-18a4bb44af"5d9dae4e-0dfe-4e53-9e56-18a4bb44af","asset_category":"USER"},"entity":{"job_run":{"job_ref":"28723316-9373-44ba-9229-7c796f21b099","job_name":"E2E 测试的虚拟作业","job_type ":"notebook","state":"Starting","isScheduledRun":false,"configuration":{"env_id":"jupconda37-aff59748-260a-476e-9578-b4f4a93e7a92","version":"ca0b9a58- ba0d-4d28-93d5-3cdc66a5b137","env_type":"notebook","env_variables":[],"job_manager_id":"9268a8a8-72e4-47a1-a851-65f38d8284ce","notebook_job_output":{},"command_line_arguments" :[]},"project_name":"Tahoe Migration"}},"href":"/v2/assets/5d9dae4e-0dfe-4e53-9e56-ee18a4bb44af?project_id=aff59748-260a-476e-9578-b4f4a93e7a92"}

我想从输出流中提取asset_id的值并将其存储在shell 脚本中的变量中。我尝试将响应存储在 bash 变量中并尝试使用 awk 进行解析,但没有成功。你们中的一个可以给我一个关于如何解决这个问题的想法吗?

谢谢

标签: bashcurl

解决方案


jq处理json要好得多,尽管您需要先去掉“作业执行中的引用响应是”前缀。像这样的东西:

response=$(curl ...)
asset_id=$(echo "${response#*Response from job execution is }" | jq -r '.metadata.asset_id')

推荐阅读