[英]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.