gpt4 book ai didi

amazon-web-services - 如何在 AWS CLI 过滤器中使用正则表达式

转载 作者:行者123 更新时间:2023-12-04 14:22:09 30 4
gpt4 key购买 nike

我正在使用 AWS 命令​​行界面 (CLI) 列出一些来自 AWS 的 AMI 镜像。图像的名称是这样的:

XY_XYZ_Docker_1.13_XYZ_XXYY

使用时

aws ec2 describe-images --filters 'Name=name,Values="*_Docker_1.13_*"'

它按预期工作。

现在我想使用正则表达式而不是名称过滤器的静态值。在 AWS-Docs 中,我读到通过 RegEx 过滤 is possible我的做法是:

1:

aws ec2 describe-images --filters 'Name=name,Values="[_]Docker[_][0-9][.][0-9]{2}[_]"'

为此,结果总是null。我尝试了不同的方式来引用 RegEx。

2:

[_]Docker[_][0-9][.][0-9]{2}[_]

(不带引号)导致

Error parsing parameter '--filters': Expected: ',', received: 'D' for input: Name=name,Values=[]Docker[][0-9][.][0-9]{2}[_]

3:

 *[_]Docker[_][0-9][.][0-9]{2}[_]*

(带星号)导致

Error parsing parameter '--filters': Expected: ',', received: ']' for input: Name=name,Values=[_]Docker[_][0-9][.][0-9]{2}[_]

最佳答案

我无法找到 Jmespath 或 --filters 标志是否可以支持正则表达式,所以我只是通过管道传输到 Python 以通过正则表达式运行。

aws ec2 describe-images --filters 'Name=name,Values="*Docker*"' | \
python -c '
import json, sys, re
obj = json.load(sys.stdin)
matched_images = {"Images":[]}
for image in obj["Images"]:
if len(re.findall(r"[Dd]ocker\s?[0-9][.][0-9]{2}", image["Name"])) > 0:
matched_images["Images"].append(image)
print json.dumps(matched_images)
'

如果需要,您可以将输出(只是一个 JSON 字符串)通过管道传输到下一个 bash 命令,并在结束引号后加上管道字符。也许这可以解决使用 grep 的问题,因为它会返回 JSON 字符串而不是常规文本。

关于amazon-web-services - 如何在 AWS CLI 过滤器中使用正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53302912/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com