Скопировать содержимое html-тэгов в VIM

Есть веб-страница с тегами.

Необходимо, «выдернуть» содержимое между определенными тэгами(href) и скопировать в новый документ. Пробовал так:

:g/href/y  

Потом, :e new.txt p.
Проблема в том, что копирует только одну строку.
Все остальные не копирует. (копирует также с тэгам href)
Просьба помочь в решении данного вопроса.

<h2 class="какой-то класс"><a href="http://mysite.ru">Содержимое1</a>
<span class="какой-то класс" title="заголовок"><a href="http://mysite.ru">Содержимое2</a></span>
</h2>
<p><a href="http://mysite.ru">Содержимое3</a></p>
  
Файл новый  new.txt
Содержимое1;Содержимое3
Содержимое2
Содержимое1;Содержимое3
Содержимое2
.......................
.......................
.......................
Содержимое1;Содержимое3
Содержимое2


Ответы (1 шт):

Автор решения: pavel

Нашел решение в интернете своего вопроса, правда с использованием sed и необходимо сделать дополнительные операции: https://www.linux.org.ru/forum/general/13055493.

Вот ответ:

Если нужно просто убрать html-теги, то, например, так:

sed 's/<[^>]>/ /g;s/<.//;s/[^>]*>//' < file.html

Здесь используются 3 регулярки для sed:

1.

s/<[^>]*>/ /g;

удаляет все символы между < и >, включая их самих и заменяет всё это на 1 пробел (пробел нужен, чтобы текст, расположенный внутри разных тегов, не слипался, если он не отделён от тегов пробелом). Флаг g обозначает, что делаем это многократно в каждой строке.

2.

s/<.*//;

на тот случай, если некоторые теги занимают 2 строки, удаляем всё, начиная от открывающего тега (все теги, имевшие закрывающий тег в той же строке, уже удалены, поэтому ничего лишнего удалено не будет). Заменяем на пустую подстроку (здесь нечему слипаться, поэтому пробел не нужен). Флаг g тоже не нужен, т. к. удаляем до конца строки, т. е. 1 раз.

3.

s/[^>]*>//

то же самое, но для окончания тега, начатого на другой строке.

Недостаток этого скрипта в том, что он корректно удаляет однострочные и двухстрочные html-теги, но вот трёх- и более строчные не удалит. Точнее удалит только первую и последнюю строку. Кроме того, он не удаляет комментарии и ява- и пхп- скрипты.

Но общий шаблон для самого простого случая я, надеюсь, дал.

Ресурс ответа: https://www.linux.org.ru/forum/general/13055493

Второй вариант удаление HTML тэгов:

sed -e :a -e 's/<[^>]*>//g;/</N;//ba' file.html

Проверено работает с HTML. Не работает с java.

→ Ссылка