Я пытаюсь проанализировать содержание файла HTML для очистки каталога загрузки, однако я изменил его к MWE, который воспроизводит мою проблему:
sed -e 's|\(href\)|\1|' index.html
Печатает полноту index.html. Я первоначально думал, что это была проблема с моим выражением, но это очень простое выражение доказывает ту несправедливость.
То же происходит, если я удаляю -e
или если я добавляю g
в конце.
Это было некоторое время, так как я сделал sed, я делаю что-то не так здесь? sed запутывается с символами в файле HTML?
необходимо использовать grep
найти текст в файле
sed
лучше для текстовых замен
Если Вы хотите перечислить гипертекстовые ссылки, Вы можете просто grep файл как это:
grep -Po '(?<=href=")[^"]*' index.html
То, что у Вас есть экс-наструганные звуки как нормальное поведение sed
используемый с командой s
замена. Я предполагаю, что Вы ищете что-то вроде этого:
sed -nr 's/^.*href="(http.*)".*$/\1/p' index.html
Где:
/
используется в качестве разделителя в этом случае (можно использовать |
или #
, и т.д.).
Опция -n
(--quiet
, --silent
) подавите автоматическую печать пространства шаблона, и наряду с этой опцией мы должны использовать некоторую дополнительную команду (команды) для сообщения sed, что распечатать.
Эта дополнительная команда является командой печати p, добавленной в конец сценария. Если sed не был запущен с-n опции, команда p копирует вход.
Опция -r
включает расширенные регулярные выражения. Без этой опции наша команда может быть:
sed -n 's/^.*href="\(http.*\)".*$/\1/p' index.html
Команда s
замена средств: #<string-or-regexp>#<replacement>#
.
^
будет соответствовать к началу строки. $
будет соответствовать в конец строки.
в, группа получения (http.*)
, будет рассматриваться как переменную \1
.
Пример использования:
$ cat index.html
<!DOCTYPE html>
<html><head><title>Page Title</title></head><body>
<h1>My First Heading</h1>
<p>My first paragraph.</p>
<a href="https://www.w3schools.com">Visit W3Schools</a>
</body></html>
$ sed -nr 's/^.*href="(http.*)".*$/\1/p' index.html
https://www.w3schools.com
Больше примеров:
Это может быть чрезмерно громоздким, но я думаю, что это работало бы на Вас, пока Ваше href содержание не содержит пробелов.
grep "href" index.html |tr ' ' '\n'|grep "^href" |cut -f2 -d'='
Первое grep
выбирает только строки, которые содержат href. tr
преобразовывает пробелы в новые строки. Второе grep
захваты просто раздел href Вы интересовались. Наконец, cut
захваты все после"href=
".