Я хочу иметь только https-Link в отдельном файле. Как это сделать, не получив полную строку кода, только ссылки?

1 ответ1

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 для:

  1. /^ href="/!d - удалить все строки, которые не соответствуют регулярному выражению ^ href="
  2. s/^ href="// - убрать префикс
  3. s/"$// - убрать суффикс

В качестве альтернативы вы можете использовать CSS-селекторы вместо XPath с tq (проект Python):

tq 'a' -a href < file.html

Примечание: после обсуждения вокруг grep я предположил Unix ... Если у вас есть Cygwin или WSL, то это, вероятно, будет работать там же.

xmllint (утилита из libxml2) имеет версию для Windows.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .