Убить HTML-узлы из оболочки - PullRequest
0 голосов
/ 03 мая 2010

Нужно решение для уничтожения таких узлов, как <footer>foobar</footer> и <div class="nav"></div> из множества файлов HTML.

Я хочу сбросить сайт на диск без меню и нижних колонтитулов, а что нет. В идеале я бы выполнил эту задачу, используя базовые инструменты Unix, такие как sed. Поскольку это не XML, я не могу использовать xmlstarlet.

Может ли кто-нибудь предложить рецепты, чтобы в идеале можно было запустить скрипт kill-node.sh 'div class="toplinks"' *.html для удаления ненужных кусочков. Спасибо,

Ответы [ 2 ]

2 голосов
/ 03 мая 2010

sed основано на регулярных выражениях. Синтаксический анализ html с помощью регулярных выражений - это тема, которая снова и снова возникает здесь, в SO, например, регулярное выражение для извлечения текста из HTML или даже лучше Можете ли вы привести некоторые примеры того, почему это сложно проанализировать XML и HTML с регулярным выражением? .

Тем не менее, если html-страницы написаны подобным образом, вы все равно сможете создать регулярное выражение, которое выполняет эту работу, но будьте готовы к тому, что невозможно (да, действительно, теоретически доказуемо невозможно) построить полное решение, работающее во всех случаях с помощью регулярных выражений.

0 голосов
/ 03 мая 2010

Просто чтобы загнать гайки ненавистников к regex, попробуйте это для размера:

sed ':a;$!N;$!ba;s/B/-B/g;s/A/BB/g;s/<\/foo>/A/g;:b;s/<foo>[^A]*A//;tb;s/BB/A/g;s/-B/B/g' foo.html

С foo.html:

<header>
keep me
<foo>gtg</foo>
</header>
<foo>
delete me</foo>
<foo>gtg</foo>
<foo>gtg</foo>

В противном случае, может кто-нибудь сделать команду ввода 1010 * HTML5 , пожалуйста. Благодарю. х

...