Sed从html文件中删除标签

时间:2013-11-09 16:07:20

标签: html regex linux bash

我需要使用sed命令使用bash脚本从html中删除所有标记。 我试过这个

sed -r 's/[\<][\/]?[a-zA-Z0-9\=\"\-\#\.\& ]+[\/]?[\>]//g' $1

和这个

sed -r 's/[\<][\/]?[.]*[\/]?[\\]?[\>]//g' $1

但我仍然怀念一些东西,有什么建议吗?

1 个答案:

答案 0 :(得分:57)

您可以使用众多HTML to text converters中的一个,如果可能,请使用Perl正则表达式<.+?>,或者如果必须sed使用<[^>]*>

sed -e 's/<[^>]*>//g' file.html

如果没有错误的余地,请改用HTML解析器。 例如。当一个元素分布在两行

<div
>Lorem ipsum</div>

这个正则表达式不起作用。


此正则表达式由三部分<[^>]*>

组成
  • 搜索开放<
  • 后跟零个或多个字符*,这不是结束>
    [...]character class,当它以^开头时,在类中查找字符而不是
  • 最后寻找关闭>

更简单的正则表达式<.*>将不起作用,因为它会搜索最长的匹配,即输入行中的最后一个结束>。例如,当输入行中有多个标记时

<name>Olaf</name> answers questions.

将导致

  

回答问题。

而不是

  

奥拉夫回答问题。

另请参阅Repetition with Star and Plus,尤其是Watch Out for The Greediness!部分及其后的详细说明。