小编典典

sed从html文件中删除标签

linux

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

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

和这

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

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


阅读 500

收藏
2020-06-02

共1个答案

小编典典

您可以使用许多HTML到文本转换器之一,可以使用Perl
regex,<.+?>或者必须sed使用<[^>]*>

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

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

<div
>Lorem ipsum</div>

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


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

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

  • 最后寻找关闭 >

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

<name>Olaf</name> answers questions.

将导致

回答问题。

代替

奥拉夫回答问题。

另请参阅与Star和Plus重复,特别是当心贪婪!接下来,进行详细说明。

2020-06-02