Удалите несколько ошибок AWS с помощью sed - PullRequest
0 голосов
/ 11 мая 2018

Я пытаюсь избавиться от нескольких возможных ошибок при выводе некоторых команд AWS с помощью sed.

Используя команду удаления снимков в качестве примера, вот команда, которую я пытаюсь использовать:

aws ec2 delete-snapshot --snapshot-id=snap-0f33096478a77c --profile=go
vcloud-admin-nonprod 2>&1 | sed -e 's/An error occurred (InvalidSnapshot.(\(NotFound|InUse|Malformed\)) when calling the DeleteSnapshot operation: //g'

Ошибка 1

An error occurred (InvalidSnapshotID.Malformed) when calling the DeleteSnapshot operation: Value ( snap-0f33096478a77c ) for parameter SNAPSHOT is invalid.

Попытка еще раз с другимошибка:

aws ec2 delete-snapshot --snapshot-id=snap-02e5e9386fef2aaa9 --profile=govcloud-admin-nonprod 2>&1 | sed -e 's/An error occurred (InvalidSnapshot.(\(NotFound|InUse|Malformed\)) when calling the DeleteSnapshot operation: //g'

Ошибка 2:

An error occurred (InvalidSnapshot.NotFound) when calling the DeleteSnapshot operation: The snapshot 'snap-02e5e9386fef2aaa9' does not exist.

Последняя попытка ошибки:

aws ec2 delete-snapshot --snapshot-id=snap-0f33082478a77c --profile=go
    vcloud-admin-nonprod 2>&1 | sed -e 's/An error occurred (InvalidSnapshot.(\(NotFound|InUse|Malformed\)) when calling the DeleteSnapshot operation: //g'

Ошибка 3:

An error occurred (InvalidSnapshot.InUse) when calling the DeleteSnapshot operation: The snapshot snap-0f33096478a77c532 is currently in use by ami-d4128aae

То, что я пытаюсь сделать, это избавиться от всего текста, кроме последней части, которая говорит, существует ли моментальный снимок или нет, и т. Д. Например, вместо этого вывода:

Произошла ошибка (InvalidSnapshot.NotFound) при вызове операции DeleteSnapshot: моментального снимка «snap-02e5e9386fef2aaa9» не существует.

Я просто хочу сохранить эту часть:

The snapshot 'snap-02e5e9386fef2aaa9' does not exist.

По какой-то причине строка sed яиспользование не подавляет вывод, который я хочу.Может кто-нибудь помочь мне с правильным синтаксисом для достижения этой цели?

Я думаю, проблема заключается в том, как я формирую эту строку:

(InvalidSnapshot.(\(NotFound|InUse|Malformed\))

1 Ответ

0 голосов
/ 11 мая 2018

Без подробной информации о вашей точной версии sed и платформе ОС, это слегка умозрительно; но формат регулярного выражения, который вы пытаетесь использовать, вероятно неверен. Чтобы заменить xa или x(b) ничем, обычно работают следующие синтаксисы:

sed -e 's/x\(a\|(b)\)//'
sed -E 's/x(a|\(b\))//'
sed -r 's/x(a|\(b\))//'

Параметр -E или -r является нестандартным и может вообще не существовать в вашей версии. Там, где он существует, он выбирает расширенный (egrep) синтаксис регулярных выражений вместо довольно примитивного традиционного синтаксиса регулярных выражений sed, который является вариантом того, что POSIX называет базовыми регулярными выражениями. Обратите внимание, в частности, на то, что группирующие круглые скобки и строка чередования требуют обратной косой черты перед ними; без обратной косой черты они просто соответствуют друг другу буквально. В ERE они являются правильными метасимволами регулярных выражений, и вам нужен обратный слэш, чтобы дословно их сопоставить.

В конечном итоге, проверьте вашу местную sed справочную страницу.

...