Как извлечь строку между узором с помощью sed - PullRequest
0 голосов
/ 02 февраля 2020

У меня есть файл со следующими данными: json data

    "comments": {
  "href": "https://api.github.com/repos/sumith08/myrepo/issues/xxxx/comments"
},

Я пытаюсь извлечь строку из файла с помощью команды sed с помощью команды ниже.

sed -n '/"comments": {/,/}/p' commands.txt

Вывод должно быть только

https://api.github.com/repos/sumith08/myrepo/issues/xxxx/comments

Но я получаю

        "comments": {
  "href": "https://api.github.com/repos/sumith08/myrepo/issues/xxxx/comments"
},

Может кто-нибудь помочь мне с правильной командой, пожалуйста?

Ответы [ 2 ]

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

Как указывалось в нескольких комментариях, sed может оказаться неподходящим инструментом для теста, тогда как jq кажется.

Следующая команда работает для простого примера, который вы опубликовали, но, вероятно, неэффективно / неправильно, как только вы используете его для более сложного JSON файла.

sed -n 's/.*\(https.*\)"/\1/p'
0 голосов
/ 05 февраля 2020

Чтобы исключить начало и конец диапазона, вы можете переключить p на {//!p}

Но это все равно оставляет всю строку:

$ sed -n '/"comments": {/,/}/{//!p}' commands.txt
"href": "https://api.github.com/repos/sumith08/myrepo/issues/xxxx/comments"

Таким образом, вы можете добавить на другой ответ:

$ sed -n '/"comments": {/,/}/{//!s/.*\(http.*\)".*/\1/p}' commands.txt
https://api.github.com/repos/sumith08/myrepo/issues/xxxx/comments

//! сокращенно сокращенно для строк, не соответствующих предыдущему совпадению.

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