29

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

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

有了这个

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

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

4

1 回答 1

93

您可以使用许多HTML 到文本转换器中的一种,如果可能,请使用 Perl 正则表达式,<.+?>或者如果必须sed使用它<[^>]*>

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

如果没有出错的余地,请改用 HTML 解析器。例如,当一个元素分布在两条线上时

<div
>Lorem ipsum</div>

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


这个正则表达式由三部分组成<[^>]*,>

  • 寻找开口<
  • 后跟零个或多个字符*,不是结束符>
    [...]是一个字符类,当它以^查找不在该类中的字符开始时
  • 最后寻找关闭>

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

<name>Olaf</name> answers questions.

将导致

回答问题。

代替

奥拉夫回答问题。

另请参阅Star 和 Plus 的重复,尤其是当心贪婪部分!以及以下,以获得详细的解释。

于 2013-11-09T16:21:04.383 回答