удалить теги html-комментариев с помощью регулярных выражений - PullRequest
7 голосов
/ 30 октября 2010
This is how my text (html) file looks like
    <!--
     |                                |
     |  This is a dummy comment       |
     |      please delete me          |
     |         asap                   |
     |                                |
      ________________________________
     | -->

    this is another line 
    in this long dummy html file...
    please do not delete me

Я пытаюсь удалить комментарий, используя sed:

cat file.html | sed 's/.*<!--\(.*\)-->.*//g'

Не работает :( Что я делаю не так?

Большое спасибо за помощь!

Ответы [ 3 ]

11 голосов
/ 30 октября 2010

patrickmdnet имеет правильный ответ.Здесь в одной строке используется расширенное регулярное выражение:

cat file.html | sed -e :a -re 's/<!--.*?-->//g;/<!--/N;//ba'

Вот хороший ресурс для получения дополнительной информации о sed.Этот седан - адаптация однострочника № 92

http://www.catonmat.net/blog/sed-one-liners-explained-part-three/

7 голосов
/ 30 октября 2010

Одна проблема с вашей первоначальной попыткой состоит в том, что ваше регулярное выражение обрабатывает только комментарии, которые целиком находятся в одной строке. Кроме того, ведущий и завершающий ". *" Удалит текст без комментариев.

Вам лучше использовать существующий код, а не свой собственный.

http://sed.sourceforge.net/grabbag/scripts/strip_html_comments.sed

#! /bin/sed -f
# Delete HTML comments
# i.e. everything between <!-- and -->
# by Stewart Ravenhall <stewart.ravenhall@ukonline.co.uk>

/<!--/!b
:a
/-->/!{
    N
    ba
}
s/<!--.*-->//

(из http://sed.sourceforge.net/grabbag/scripts/)

См. Эту ссылку, чтобы узнать, как использовать perl-модули для удаления комментариев HTML (используя Regexp :: Common, HTML :: Parser или File :: Comments.)

http://www.perlmonks.org/?node_id=500603

2 голосов
/ 30 октября 2010

Я думаю, что вы можете сделать это с awk, если хотите.Начало:

[~] $ more test.txt
<!--

An HTML style comment 

-->

Some other text

<div>
<p>blah</p>
</div>

<!-- Whoops
     Another comment -->
<span>Something</span>

Результат awk:

[~]$ cat test.txt | awk '/<!--/ {off=1} /-->/ {off=2} /([\s\S]*)/ {if (off==0) print; if (off==2) off=0}'
Some other text

<div>
<p>blah</p>
</div>

<span>Something</span>
...