Скопировать содержимое 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 шт):
Нашел решение в интернете своего вопроса, правда с использованием 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.