Это мой вывод JSON для этой команды aws logs list-log-groups
, и из этого мне нужно, чтобы первое значение "arn" было выделено. Как я могу это сделать?
{
"logGroups": [
{
"logGroupName": "alla",
"creationTime": 1594638588652,
"metricFilterCount": 0,
"arn": "arn:aws:logs:us-east-1:12345678910:log-group:*:*",
"storedBytes": 0
},
{
"logGroupName": "mahi",
"creationTime": 1594638580461,
"metricFilterCount": 0,
"arn": "arn:aws:logs:us-east-1:12345678910:log-group:*:*",
"storedBytes": 0
}
]
}
Недавно я обнаружил инструмент под названием gron
.
gron <<'END_JSON'
{
"logGroups": [
{
"logGroupName": "alla",
"creationTime": 1594638588652,
"metricFilterCount": 0,
"arn": "arn:aws:logs:us-east-1:12345678910:log-group:*:*",
"storedBytes": 0
},
{
"logGroupName": "mahi",
"creationTime": 1594638580461,
"metricFilterCount": 0,
"arn": "arn:aws:logs:us-east-1:12345678910:log-group:*:*",
"storedBytes": 0
}
]
}
END_JSON
json = {};
json.logGroups = [];
json.logGroups[0] = {};
json.logGroups[0].arn = "arn:aws:logs:us-east-1:12345678910:log-group:*:*";
json.logGroups[0].creationTime = 1594638588652;
json.logGroups[0].logGroupName = "alla";
json.logGroups[0].metricFilterCount = 0;
json.logGroups[0].storedBytes = 0;
json.logGroups[1] = {};
json.logGroups[1].arn = "arn:aws:logs:us-east-1:12345678910:log-group:*:*";
json.logGroups[1].creationTime = 1594638580461;
json.logGroups[1].logGroupName = "mahi";
json.logGroups[1].metricFilterCount = 0;
json.logGroups[1].storedBytes = 0;
Этот инструмент преобразует нотацию JSON в построчный javascript, который можно легко использовать.
$ arn=$(gron <<'END_JSON' | sed -En '/json\.logGroups\[0\]\.arn/ s/^[^"]*"(.*)";$/\1/p'
{
...
}
END_JSON
)
$ echo "$arn"
arn:aws:logs:us-east-1:12345678910:log-group:*:*
Использовать jq
:
aws logs list-log-groups | jq -r '.logGroups[0].arn'
Выход:
arn:aws:logs:us-east-1:929815623526:log-group:alla:
jq
можно установить из репозитория юниверса
:
sudo apt install jq
jq
предпочтительнее для анализа json
, но если jq
не подходит по любой причине, и вы знаете, что формат не изменится, вы можете использовать grep -P
и head -n1
:
aws logs list-log-groups | grep -Po '"arn": "\K[^"]*' | head -n1