Удаление определенных гиперссылок с сайта с помощью bash - PullRequest
0 голосов
/ 12 октября 2019

У меня есть веб-сайт, содержащий несколько десятков гиперссылок в следующем формате:

<a href=/news/detail/1/hyperlink>textvalue</a>

Я хочу получить все гиперссылки и их текстовые значения, где гиперссылка начинается с /news/detail/1/.

Вывод должен быть в следующем формате:

textvalue
/news/detail/1/hyperlink

1 Ответ

0 голосов
/ 12 октября 2019

Прежде всего, люди придут сюда (возможно, будут говорить о ком-то по имени Cthuhlu) и скажут вам, что awk / regex не являются парсерами HTML. И они правы, и вы должны подумать над тем, что они говорят. Реально, вы очень часто можете получить что-то вроде этого:

sed -n 's/^.*<a\s\+href\=\([^>]\+\)>\([^<]\+\)<\/a>.*$/\2\n\1/p' input_file.html

Это говорит sed прочитать файл input_file.html, найти строки, которые соответствуют регулярному выражению, заменить их разделами, которые вы указали длявывод, а все остальное отбросить. Результат будет распечатан на терминал.

Это также предполагает, что файл отформатирован так, что каждый экземпляр <a href=/news/detail/1/hyperlink>textvalue</a> находится на отдельной строке. Регулярное выражение может быть легко изменено, чтобы приспособиться к другому форматированию, если это необходимо.

Если все ссылки, которые вы хотите, начинаются с /news/detail/1/, это, вероятно, будет работать:

sed -n 's/^.*<a\s\+href\=\(\/news\/detail\/1\/[^>]\+\)>\([^<]\+\)<\/a>.*$/\2\n\1/p' input_file.html
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...