Как извлечь простой текст и сохранить в файл?

#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