私が試したコードは私が望む正確な結果を得ませんでした。これは私が試したコードです。
curl -s --request GET \
http://10.10.5.242/api/v1/incidents \
-H "Content-Type: application/json;" \
-H "X-Cachet-Token: ROvbssneyYwR8fwNgOWj" \
| json_pp | grep -e id -e component_id
これはこれを出力します
"component_id" : "4",
"id" : 1,
"id" : 2,
"component_id" : "4",
"id" : 3,
"component_id" : "4",
"component_id" : "4",
"id" : 4
"component_id" : "3",
"id" : 5,
"component_id" : "2",
"id" : 6,
私が使っているAPIの内容です。http://10.10.5.242/api/v1/incidents
{
"meta": {
"pagination": {
"total": 6,
"count": 6,
"per_page": 20,
"current_page": 1,
"total_pages": 1,
"links": {
"next_page": null,
"previous_page": null
}
}
},
"data": [
{
"id": 1,
"component_id": "4",
"name": "Service Unavailable",
"status": "4",
"visible": 1,
"message": "Server is not responding",
"scheduled_at": "2018-02-26 10:05:03",
"created_at": "2018-02-23 14:56:16",
"updated_at": "2018-02-26 08:37:11",
"deleted_at": null,
"human_status": "Fixed"
},
{
"id": 2,
"component_id": "4",
"name": "Service Unavailable",
"status": "4",
"visible": 1,
"message": "Server is not responding",
"scheduled_at": "2018-02-26 10:05:03",
"created_at": "2018-02-23 15:39:52",
"updated_at": "2018-02-26 08:37:11",
"deleted_at": null,
"human_status": "Fixed"
},
{
"id": 3,
"component_id": "4",
"name": "Service Unavailable",
"status": "4",
"visible": 1,
"message": "Server is not responding",
"scheduled_at": "2018-02-26 10:05:03",
"created_at": "2018-02-26 08:15:43",
"updated_at": "2018-02-26 08:37:12",
"deleted_at": null,
"human_status": "Fixed"
},
{
"id": 4,
"component_id": "4",
"name": "Service Unavailable",
"status": "4",
"visible": 1,
"message": "Server is not responding",
"scheduled_at": "2018-02-26 10:05:03",
"created_at": "2018-02-26 08:19:12",
"updated_at": "2018-02-26 08:37:12",
"deleted_at": null,
"human_status": "Fixed"
},
{
"id": 5,
"component_id": "3",
"name": "Service Unavailable",
"status": "2",
"visible": 1,
"message": "Server is not responding",
"scheduled_at": "2018-02-26 10:05:03",
"created_at": "2018-02-26 10:01:32",
"updated_at": "2018-02-26 10:01:32",
"deleted_at": null,
"human_status": "Identified"
},
{
"id": 6,
"component_id": "2",
"name": "Service Unavailable",
"status": "2",
"visible": 1,
"message": "Server is not responding",
"scheduled_at": "2018-02-26 10:05:03",
"created_at": "2018-02-26 10:03:38",
"updated_at": "2018-02-26 10:03:38",
"deleted_at": null,
"human_status": "Identified"
}
]
}
私が望む結果はすべて得ることです。ID~の 「構成要素ID」:「4」、そしてこれを出力します
"id" : 1,
"id" : 2,
"id" : 3,
"id" : 4,
私が望むのは、コンポーネントIDをgrepし、コンポーネントIDのすべてのID値を取得することです。私の計画は、これらの値を私のforループにインポートするためです。
答え1
使用jq
:
curl -s --request GET \
http://10.10.5.242/api/v1/incidents \
-H "Content-Type: application/json;" \
-H "X-Cachet-Token: ROvbssneyYwR8fwNgOWj" |
jq '.data[] | select(.component_id=="4").id'
質問に引用したJSON形式でデータが渡されると仮定すると、
1
2
3
4
これはJSONの4と同じセクションid
のオブジェクトです。data
component_id
得るために精密要求された出力を使用します。
jq -r '.data[] | select(.component_id=="4") | "\"id\": \(.id),"'
特定の文書に対して以下が生成されます。
"id": 1,
"id": 2,
"id": 3,
"id": 4,
答え2
以下を使用できます。
grep -B1 "\"component_id\": \"4\"" | grep "\"id\":" | sed 's/^ *//g'
B1
:試合前のセリフもあります。sed 's/^ *//g'
: 先行および末尾のスペースを削除
例:
echo sample | grep -B1 "\"component_id\": \"4\"" | grep "\"id\":" | sed 's/^ *//g'
結果は次のとおりです。
"id": 1,
"id": 2,
"id": 3,
"id": 4,