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'
它不起作用:(我做错了什么?
非常感谢你的帮助!
答案 0 :(得分:11)
patrickmdnet有正确的答案。这是使用扩展正则表达式的一行:
cat file.html | sed -e :a -re 's/<!--.*?-->//g;/<!--/N;//ba'
这是了解有关sed的更多信息。这个sed是单行#92
的改编版http://www.catonmat.net/blog/sed-one-liners-explained-part-three/
答案 1 :(得分: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/<!--.*-->//
(来自http://sed.sourceforge.net/grabbag/scripts/)
有关使用perl模块删除HTML注释的各种方法,请参阅此链接(使用Regexp :: Common,HTML :: Parser或File :: Comments。)我确信有使用其他实用程序的方法。
答案 2 :(得分:3)
如果您愿意,我认为您可以使用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>