Grep из текстового файла (JSON формат) - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть текст в формате JSON:

{
  "items": [ {
    "downloadUrl" : "some url",
    "path": "yxxsf",
    "id" : "abc",
    "repository" : "example",
    "format" : "zip",
    "checksum" : {
      "sha1" : "kdhjfksjdfasdfa",
      "md5" : "skjfhkjshdfkjshfkjsdhf"
    }
  }],
  "continuationToken" : null
}

Я хочу извлечь контекст URL загрузки (в этом примере я хочу "некоторый URL"), используя grep, и сохранить его в другом файле TXT. , TBH я никогда не использовал grep

Ответы [ 3 ]

1 голос
/ 06 февраля 2020

Использование grep

grep -oP 'downloadUrl"\s:\s"(.*)",' myfile > urlFile.txt

См. Это регулярное выражение в действии: https://regex101.com/r/DvnXCO/1


Лучший способ сделать это - использовать jq

Скачать jq для Windows: https://stedolan.github.io/jq/download/

jq ".items[0].downloadUrl" myfile > urlFile.txt
0 голосов
/ 07 февраля 2020

Хотя json string может содержать символ двойной кавычки, экранированный обратным символом sh, как двойная кавычка, так и обратный символ sh в URL должны кодироваться в процентах в соответствии с RF C 3986. Тогда Вы можете извлечь URL с помощью:

tr "[:space:]" " " < file.json | grep -Po '"downloadUrl"\s*:\s*\K"[^"]+"'
  • Позвольте мне использовать tr для предварительной обработки файла json для преобразования всех символов blank в пробельные символы. Тогда следующая grep будет работать, если имя и пара значений находятся в отдельных (но последовательных) строках.
  • Оператор \K в регулярном выражении является поиском переменной длины без включения предыдущий шаблон в сопоставленном результате.

Обратите внимание, что приведенная выше команда работает с предоставленным примером, но может быть недостаточно устойчивой для произвольных входных данных. Я бы по-прежнему рекомендовал использовать jq для строгой цели.

0 голосов
/ 06 февраля 2020

Если вы хотите использовать только grep:

grep downloadURL myfile > new_file.txt

Если вы предпочитаете более чистый вариант, добавьте команду cut:

grep downloadURL myfile | cut -d\" -f4 > new_file.txt

Кстати, изображение json файл показывает, что вы используете блокнот (windows?)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...