uwi*_*we4 5 command-line-interface amazon-web-services
我正在使用 AWS 命令行界面 (CLI) 列出来自 AWS 的一些 AMI 映像。图像的名称类似于:
XY_XYZ_Docker_1.13_XYZ_XXYY
使用时
aws ec2 describe-images --filters 'Name=name,Values="*_Docker_1.13_*"'
Run Code Online (Sandbox Code Playgroud)
它按预期工作。
现在我想使用正则表达式而不是名称过滤器的静态值。在AWS文档中,我读到可以通过正则表达式进行过滤 我的方法是:
1:
aws ec2 describe-images --filters 'Name=name,Values="[_]Docker[_][0-9][.][0-9]{2}[_]"'
Run Code Online (Sandbox Code Playgroud)
为此,结果始终为空。我尝试了引用正则表达式的不同方式。
2:
[_]Docker[_][0-9][.][0-9]{2}[_]
Run Code Online (Sandbox Code Playgroud)
(不带引号)导致
解析参数“--filters”时出错:预期:“,”,收到:“D”,输入:Name=name,Values=[ ]Docker[ ][0-9][.][0-9]{2} [_]
3:
*[_]Docker[_][0-9][.][0-9]{2}[_]*
Run Code Online (Sandbox Code Playgroud)
(带星号)导致
解析参数“--filters”时出错:预期:“,”,收到:“]”输入:名称=名称,值= [_]Docker[_][0-9][.][0-9]{ 2}[_]
小智 3
我无法找到 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)
'
Run Code Online (Sandbox Code Playgroud)
如果需要,您可以在结束引号后使用管道字符将输出(只是一个 JSON 字符串)传输到下一个 bash 命令。也许这可以解决使用 grep 的问题,因为它返回 JSON 字符串或常规文本。
归档时间: |
|
查看次数: |
18560 次 |
最近记录: |