[英]Shell Script :: How to put multiple filter in grep command
我當前的腳本正在為“useraccesses”下的所有塊返回“userAccessId”值。 下面我編寫了腳本和后端 json 響應。 我已經過濾並獲取了“useraccesses”下所有塊的“userAccessId”值。
但我的實際要求是,我想獲得“numberOfAccessSchedules”值大於零的“userAccessId”值。 有人可以修改我的腳本嗎?
#!/bin/sh
#
export TOKEN=$(curl -k -s -d "client_id=guard-public" -d "grant_type=password" -d "username=test" -d "password=test@123" "https://10.00.00.00/auth/realms/guard/protocol/openid-connect/token" | python -c "import sys, json; print json.load(sys.stdin)['access_token']")
#GET UserAccess ID
#echo "GET useraccess ID for all users"
curl -k --location --request GET "https://10.00.00.00:111/guardian-restservice/v1/useraccesses?page=$i&page_size=10000" -k -H "Authorization: bearer $TOKEN" | jq | grep "userAccessId" | awk -F : {'print $2'} | sed 's/,//' >> alluseraccessId.txt
{
"page": {
"currentPage": 1,
"totalPages": 7,
"pageSize": 10000
},
"useraccesses": [
{
"userAccessId": 918568786,
"numberOfAccessSchedules": 2,
"customAttributes": {},
"networkElementUserId": ""
},
{
"userAccessId": 918569013,
"numberOfAccessSchedules": 1,
"customAttributes": {},
"networkElementUserId": ""
},
{
"userAccessId": 918569301,
"numberOfAccessSchedules": 0,
"customAttributes": {},
"networkElementUserId": ""
},
...........
...........
...........
]
}
918568786 918569013 918569301
918568786 918569013
您可以使用jq
輕松提取所需的值,這是在 shell 腳本中使用 JSON 的事實上的標准實用程序。 嘗試將基於正則表達式的工具應用於 JSON 或 XML 等結構化數據格式幾乎總是一個壞主意。
curl ... | jq '.useraccesses[] | select(.numberOfAccessSchedules>0) | .userAccessId' >> alluseraccessId.txt
添加
918568786
918569013
到文件。
表示“對於頂級對象的useraccesses
元素中的數組的每個元素,如果其numberOfAccessSchedules
元素大於 0,則打印其userAccessId
元素的值。”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.