使用regexp删除html注释标签

Zen*_*net 7 regex sed html-parsing

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
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用sed删除评论:

cat file.html | sed 's/.*<!--\(.*\)-->.*//g'
Run Code Online (Sandbox Code Playgroud)

它不起作用:(我做错了什么?

非常感谢您的帮助!

Bri*_*nts 11

patrickmdnet有正确答案.这是使用扩展正则表达式的一行:

cat file.html | sed -e :a -re 's/<!--.*?-->//g;/<!--/N;//ba'
Run Code Online (Sandbox Code Playgroud)

这是了解更多关于sed的好资源.这个sed是单行#92的改编

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


pat*_*net 7

原始尝试的一个问题是您的正则表达式只处理完全在一行上的注释.此外,前导和尾随".*"将删除非评论文本.

您最好使用现有代码而不是自己编写代码.

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/<!--.*-->//
Run Code Online (Sandbox Code Playgroud)

(来自http://sed.sourceforge.net/grabbag/scripts/)

有关使用perl模块删除HTML注释的各种方法,请参阅此链接(使用Regexp :: Common,HTML :: Parser或File :: Comments.)我确信有使用其他实用程序的方法.

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