Sed从html文件中删除标签

mic*_*e93 16 html regex linux bash

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

sed -r 's/[\<][\/]?[a-zA-Z0-9\=\"\-\#\.\& ]+[\/]?[\>]//g' $1
Run Code Online (Sandbox Code Playgroud)

这个

sed -r 's/[\<][\/]?[.]*[\/]?[\\]?[\>]//g' $1
Run Code Online (Sandbox Code Playgroud)

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

Ola*_*che 60

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

sed -e 's/<[^>]*>//g' file.html
Run Code Online (Sandbox Code Playgroud)

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

<div
>Lorem ipsum</div>
Run Code Online (Sandbox Code Playgroud)

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


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

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

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

<name>Olaf</name> answers questions.
Run Code Online (Sandbox Code Playgroud)

会导致

回答问题.

代替

奥拉夫回答问题.

另请参阅重复使用Star和Plus,尤其是注意贪婪!以下是详细说明.