LINUX.ORG.RU

Удалить все комментарии и теги из HTML файла

 , ,


1

2

Есть задание: Написать сценарий для sed и awk для удаления тегов и комментариев HTML. Теги и комментарии могут быть многострочными. Обеспечить правильную подстановку для знаков <, >, & и ". В общем нужно убрать теги и комменты вокруг текста, а сам текст оставить. Из такого:

<!-- commentary -->
<html><head><meta http-equiv="Content-Type" content="text/html; charset=KOI8-R">
   
   <title>hello</title>
<link rel="stylesheet" crossorigin="anonymous" href="./hello_files/main.css"><style type="text/css">
<body>
<center>
<b>
Text1
</b>
</center>
<br>
Text2
<br>
<br>
Text3
<input type="text" name="field1" value="" size="32" maxlength="64">
<input type="submit" value="Start">
<input type="reset" value="Clear">
</form>
<hr>
</body></html>

Должно получиться такое:


    commentary
   
   hello




Text1



Text2


Text3

Написал пока что только такой код, но он удаляет только теги:

sed -n '1h;2~1H;${g;s/<[^>]*>//g;p}' test.html >htmlres.txt

Как написать чтобы еще удалялись комментарии? А так же как написать это на awk'e?

Лабораторные, домашние задания и пр. - в Job.

hippi90 ★★★★★
()

Амбициозненько, если только с sed и awk... Кстати, то, что у тебя уже есть, неправильно работает для HTML с таким содержимым:

<div data-text=">ha">bbb</div>

Я бы какой нибудь готовый XML парсер использовал на твоём месте. Например, PHP DOM.

anonymous
()

это где такие задания раздают?

anonymous
()
sed -n '1h;2~1H;${g;s/<!--[^>]*-->//;s/<[^>]*>//g;p}' test.html >htmlres.txt

Написал так. awk знаю плохо, так что если кто-то захочет помочь - напишите такой же код, только на awk'e

loweshv
() автор топика
Ответ на: комментарий от nerve

Делает то, что в задании написано: удаляет многострочные комментарии и теги.

loweshv
() автор топика

Написал такой код на awk:

awk '/<!--/,/-->/ {next}1' test.html > test2.html
awk '/</,/>/ {next}1' test.html > test2.html

Он удаляет только теги и оставляет текст:

<b>
Text1
</b>

но не оставляет текста когда все это расположено в одной строке:

<title>hello</title>

как сделать так, чтобы «hello» не удалялось?

loweshv
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.