Прежде всего, не пытайтесь анализировать HTML с помощью регулярных выражений ...
XPath может получить то, что вы хотите - он был разработан специально для этого:
//a/@href
Затем, чтобы использовать XPath с xmllint
(другие утилиты будут существовать):
xmllint --shell --html file.html <<<'cat //a/@href'
Это даст вам кучу вещей, в том числе prompts ( / >
), имя атрибута ( href="..."
) и разделители ( -------
) ... так что отфильтруйте их, отсортируйте и получите список уникальных URL:
xmllint --shell --html file.html <<<'cat //a/@href' \ | sed '/^ href="/!d;s/^ href="//;s/"$//' \ | sort \ | uniq
Все без grep
.
Здесь мы используем sed
для:
/^ href="/!d
- удалить все строки, которые не соответствуют регулярному выражению^ href="
s/^ href="//
- отрывать префиксs/"$//
- убрать суффикс
В качестве альтернативы вы можете использовать CSS-селекторы вместо XPath с помощью tq
(проект Python):
tq 'a' -a href < file.html
Примечание: после обсуждения grep
я предположил Unix ... Если у вас есть Cygwin или WSL, то это, вероятно, будет работать там же.
xmllint
(утилита из libxml2 ) имеет выпуск Windows.