Я получаю следующую ошибку при выполнении сценария оболочки: (Bash)
An error occurred (InvalidID) when calling the CreateTags operation: The ID ‘{‘ is not valid”
поэтому, когда я смотрю на сценарий оболочки, есть две строки сценария, которые вызывают проблему, я обнаружил, что вывод Строки 1 используется как ввод Строки 2 (--resource $ remote_snapshot_id) в моем случае:
Строка 1:
remote_snapshot_id=$(aws ec2 copy-snapshot --region us-east-1 --source-region $region --source-snapshot-id $snapshot_id --description $snapshot_id)
Строка 2:
aws ec2 create-tags --region us-east-1 --resource $remote_snapshot_id --tags Key=CreatedBy,Value=AutomatedBackup
Когда я пытаюсь выполнить Строку 1 как единственную команду в Терминале Linux:
aws --region us-east-1 ec2 copy-snapshot --source-region us-west-1 --source-snapshot-id snap-00220030300040 --description "Automated_Backup_425"
Вывод:
{
"SnapshotId": "snap-00880090900090"
}
Но Строке 2 требуется только значение snap-00880090900090 из вывода Строки 1. (так как в настоящее время он выбирает весь вывод, начиная с "{он выдает такую ошибку, поскольку для этого требуется только snap-00880090900090)
Итак, мой вопрос в том, как я могу grep snap-00880090900090 и сохранить этот вывод для подачи для строки 2 ( --resource $ remote_snapshot_id)
Кто-нибудь может помочь исправить это, пожалуйста?
Как я могу grep snap-00880090900090 [from
{"SnapshotId": "snap-00880090900090"}
]?
Поскольку формат, из которого вы собираетесь извлечь, - JSON. Лучше всего
выполнить это с помощью инструментов, поддерживающих JSON. Я бы порекомендовал jq
, если вы можете
установить его:
command | jq -r .SnapshotId
Если команда
выводит упомянутый вами фрагмент JSON, то jq
{ Команда {1}} выведет только snap-00880090900090
(без кавычек или
"raw", благодаря опции -r
).
Если вы не можете установить надлежащий инструмент с поддержкой JSON, можете использовать более хрупкое решение и знать, что идентификатор снимка всегда будет иметь форму , показанную в вашем примере ("snap - "за которым следует последовательность цифр), , затем вы можете извлечь это следующим образом, используя GNU grep:
command | grep -o 'snap-[0-9]\+'