#bash #ubuntu
#bash #ubuntu
Вопрос:
Я пишу скрипт bash для облачного API hetzner, и мне нужно сохранить идентификатор сервера в текстовом файле. После команды, использующей его, будет выведено следующее,
{
"server": {
"id": 12345678,
"name": "servertest-101",
"status": "initializing",
"created": "2020-09-18T09:22:21 00:00",
Это всего лишь фрагмент, но это из первой строки ответа.
Как я могу извлечь и сохранить это значение?
Комментарии:
1. Добро пожаловать в SO, пожалуйста, добавьте свои усилия, которые вы приложили для решения вашей собственной проблемы, в свой вопрос и дайте нам знать. Это настоятельно рекомендуется на SO.
Ответ №1:
API возвращает в формате json: вы не предоставили много информации, но используете jq для ее анализа:
$ cat myinput.json
{
"server": {
"id": 12345678,
"name": "servertest-101",
"status": "initializing",
"created": "2020-09-18T09:22:21 00:00"
}
}
$ jq -r .server.id myinput.json
12345678
перенаправить в файл:
$ jq -r .server.id myinput.json > myoutputfile
$ cat myoutputfile
12345678
Ответ №2:
Вы можете передать вывод вашей команды для дальнейшей обработки следующим образом:
cat yourjson.json | grep -m 1 -E -o '"id": [0-9] ' | cut -d" " -f 2 > yourtextfile.txt
Сначала получите содержимое json, затем отправьте его с помощью команды grep, которая извлекает только часть "id": 1234567
с использованием регулярного выражения. Затем передайте этот результат команде cut, которая разбивает его на пробел и выбирает вторую часть, которая является вашим значением. Наконец, вы перенаправляете результат задания в нужный текстовый файл.
Если вы уверены, что вашим значением всегда будет первое число во входных данных, вы можете просто выбрать его с помощью grep:
cat yourjson.json | grep -m 1 -E -o '[0-9] ' > output.txt