используя sed для извлечения нескольких пар ключ-значение - PullRequest
0 голосов
/ 09 января 2020

у нас есть следующее json:

CREDENTIALS={
    "AssumedRoleUser": {
        "AssumedRoleId": "AROAISP5PIZYVEX", 
        "Arn": "arn"
    }, 
    "Credentials": {
        "SecretAccessKey": "lWUZ+C+pzGroJd+575kOIVqgl", 
        "SessionToken": "FwoGZXIvYXdzEGQaDHhM75xUifznTTzTnSK7Aer4WveFRcMqaiQFjOnbGRq/+UF8k0cpX2xc35epGjV49hf26LHV4+MOj0fyTk8w1aMk2ZH5Kmj9CZ6jKcYQtebUiCFRhmufK+VXovveD1nx9XAgka", 
        "Expiration": "2020-01-09T03:21:27Z", 
        "AccessKeyId": "ASIAWN6"
    }
}

Мне нужно использовать sed, чтобы получить SecretAccessKey, SessionToken и AccessKeyId. Не уверен, как, любая идея?

Ответы [ 2 ]

2 голосов
/ 09 января 2020

Чтобы получить SecretAccessKey:

sed -nr '/SecretAccessKey/{s/.*"SecretAccessKey": "([^"]+)".*/\1/;p;}' file

Сначала мы подавляем печать по умолчанию (-n) каждой строки. Поскольку строка содержит SecretAccessKey, мы затем пытаемся получить значение secretaccesskey, имея шаблон, в котором мы ищем значение между кавычками, а затем печатаем совпадение.

1 голос
/ 09 января 2020

Вопрос имеет тэг , и действительно имеет смысл использовать утилиту с поддержкой JSON, такую ​​как jq, поэтому здесь приведен пример того, как можно использовать jq, предполагая, что CREDENTIALS остается в силе JSON:

jq -r '.Credentials | (.SecretAccessKey, .SessionToken, .AccessKeyId)' <<< $CREDENTIALS

Для данного образца результат будет:

lWUZ+C+pzGroJd+575kOIVqgl
FwoGZXIvYXdzEGQaDHhM75xUifznTTzTnSK7Aer4WveFRcMqaiQFjOnbGRq/+UF8k0cpX2xc35epGjV49hf26LHV4+MOj0fyTk8w1aMk2ZH5Kmj9CZ6jKcYQtebUiCFRhmufK+VXovveD1nx9XAgka
ASIAWN6
...