如何用jq修改AWS CLI输出,移除Cognito用户池名称前缀
移除Cognito用户池名称的
cust_前缀 没问题,这事儿用jq的字符串处理功能就能轻松搞定,给你两种实用的方案,适配不同场景:
方案一:正则精确替换(推荐)
如果担心有些名称可能不包含cust_前缀,或者想严格只替换开头的前缀,用正则匹配的方式最稳妥:
aws cognito-idp list-user-pools --max-results 60 --region us-west-2 --query 'UserPools[*].{Names:Name}' | jq 'map(.Names |= sub("^cust_"; ""))'
细节拆解:
map(...):遍历AWS CLI返回的用户池对象数组,对每个对象做处理.Names |= sub("^cust_"; ""):针对每个对象的Names字段,用sub()函数执行正则替换。^符号确保只匹配字符串开头的cust_,避免误删名称中间出现的相同字符组合
方案二:直接截断前缀(高效简洁)
既然你提到所有名称都带有cust_前缀,那可以用更简单的字符串截断方式,执行效率更高:
aws cognito-idp list-user-pools --max-results 60 --region us-west-2 --query 'UserPools[*].{Names:Name}' | jq 'map(.Names |= ltrimstr("cust_"))'
细节拆解:
ltrimstr("cust_"):直接从字符串开头移除指定的前缀内容,逻辑简单直接,但只适合所有名称都明确带有该前缀的场景
额外优化:输出纯名称列表
如果你不需要保留原有的{Names: ...}对象结构,只想得到干净的名称字符串数组,可以调整命令:
aws cognito-idp list-user-pools --max-results 60 --region us-west-2 --query 'UserPools[*].Name' | jq 'map(sub("^cust_"; ""))'
这样输出的就是纯字符串数组,没有多余的键名。
内容的提问来源于stack exchange,提问作者Jayesh Dhandha
相关产品推荐
相关产品推荐

