一尘不染

sed从html文件中删除标签

html

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

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

和这

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

但我仍然想念什么,有什么建议吗?


阅读 392

收藏
2020-05-10

共1个答案

一尘不染

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

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

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

<div
>Lorem ipsum</div>

此正则表达式将不起作用。


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

  • 寻找开放 <
  • 后面跟着零个或多个字符*(不是结尾)> [...]是字符类,当它开始^查找
    不在 类中的字符时

  • 最后寻找关闭 >

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

<name>Olaf</name> answers questions.
2020-05-10