Как использовать регулярные выражения в AWS CLI Filter - PullRequest
0 голосов
/ 14 ноября 2018

Я использую интерфейс командной строки AWS (CLI) для отображения некоторых изображений AMI из AWS. Название изображения выглядит так:

XY_XYZ_Docker_1.13_XYZ_XXYY

При использовании

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

работает как положено.

Теперь я хочу использовать регулярное выражение вместо статического значения для фильтра имен. В AWS-Docs я читал, что фильтрация по RegEx возможна Мой подход:

1

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

Результат всегда равен null для этого. Я пробовал разные способы цитирования RegEx.

2

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

(без кавычек) приводит к

Ошибка разбора параметра '--filters': ожидается: ',', получено: 'D' для ввода: Name = Имя, Значение = [* * тысяча тридцать три] Докер [] [0-9] [.] [0-9] {2} [_]

3

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

(со звездочкой) приводит к

Ошибка разбора параметра '--filters': ожидается: ',', получено: ']' для ввода: Name = имя, значение = [_] Docker [_] [0-9] [.] [0-9] {2} [_]

1 Ответ

0 голосов
/ 15 ноября 2018

Я не смог найти, может ли 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 или обычный текст.

...