Как вернуть текст между двумя найденными частями, используя sed? - PullRequest
0 голосов
/ 25 октября 2018

Я пытаюсь просто вернуть фактический заголовок между двумя тегами html:

echo "<title>This is some text</title>" | sed -n 's/>\(.*\)</\1/p'

Я думал, что это вернет только заголовок, но вместо этого он возвращает:

<titleThis is some text/title>

Помощь

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Если sed не является строгим требованием, существуют более удобочитаемые параметры, такие как grep:

$ echo "<title>This is some text</title>" | grep -oP '(?<=<title>).*(?=</title>)'
This is some text

. Используется lookbehind

Если по какой-то причине опция -P не работает, вы можете использовать perl для использования аналогичного синтаксиса:

$ echo "<title>This is some text</title>" \
| perl -nle 'print $& if m{(?<=<title>).*(?=</title>)}'
This is some text
0 голосов
/ 25 октября 2018

Я подозреваю, что вы хотите удалить все до и после заголовка в замене, а не только в скобках.

echo "<title>This is some text</title>" | sed -n 's/.*>\(.*\)<.*/\1/p'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...