Я пытаюсь извлечь часть "имени стека" из строки AWS ARN. Строка выглядит следующим образом:
arn:aws:cloudformation:ap-southeast-2:111111111111:stack/infrastructure-dev/aaaaaaaa-f005-11e9-9e45-02bf7f1fc1f4
Проблема не столько в извлечении, сколько в замене исходного ключа измененным исходным значением, используя jq.
. Мое утверждение таково::
aws cloudformation list-exports --no-paginate | jq -r '.Exports |= map(if .ExportingStackId != "" then .ExportingStackId |= sub("(?<=\/)(.*?)(?=\/)"; "") else . end)'
Команда sub("(?<=\/)(.*?)(?=\/)"; "")
будет соответствовать, но она заменит часть строки пустой.
{
"Exports": [
{
"ExportingStackId": "arn:aws:cloudformation:ap-southeast-2:111111111111:stack//aaaaaaaa-f005-11e9-bbbb-aaaaaaaa",
"Name": "BootstrapRoleArn",
"Value": "arn:aws:iam::111111111111:role/deployment-role"
},
{
"ExportingStackId": "arn:aws:cloudformation:ap-southeast-2:111111111111:stack//aaaaaaaa-f005-11e9-bbbb-aaaaaaaa",
"Name": "PrivateSubnetAId",
"Value": "subnet-44444444444"
},
...
...
...
]
}
Мне нужно обратное этому, при котором все остальное, окружающее этот портон строки, устанавливается пустым
{
"Exports": [
{
"ExportingStackId": "infrastructure-dev",
"Name": "BootstrapRoleArn",
"Value": "arn:aws:iam::111111111111:role/deployment-role"
},
{
"ExportingStackId": "infrastructure-prod",
"Name": "PrivateSubnetAId",
"Value": "subnet-44444444444"
},
...
...
...
]
}
В качестве «дополнительного вызова» я действительно хотел быбыть в состоянии удалить добавленную часть «-dev» или «-prod», так что результат будет:
{
"Exports": [
{
"ExportingStackId": "infrastructure",
"Name": "BootstrapRoleArn",
"Value": "arn:aws:iam::111111111111:role/deployment-role"
},
{
"ExportingStackId": "infrastructure",
"Name": "PrivateSubnetAId",
"Value": "subnet-44444444444"
},
...
...
...
]
}