Я хочу иметь только https-Link в отдельном файле. Как это сделать, не получив полную строку кода, только ссылки?
1 ответ
Прежде всего, не пытайтесь анализировать HTML с помощью регулярных выражений ...
XPath может получить то, что вы хотите - он был разработан специально для этого:
//a/@href
Затем, чтобы использовать XPath с xmllint
(будут существовать другие утилиты):
xmllint --shell --html file.html <<<'cat //a/@href'
Это даст вам кучу вещей, включая подсказки (/ >
), имя атрибута (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.