複数のパターンを特定し、最初のパターンを削除する方法

複数のパターンを特定し、最初のパターンを削除する方法

私が試したコードは私が望む正確な結果を得ませんでした。これは私が試したコードです。

   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のオブジェクトです。datacomponent_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,

関連情報