我需要使用sed命令使用bash脚本从html中删除所有标记。 我试过这个
sed -r 's/[\<][\/]?[a-zA-Z0-9\=\"\-\#\.\& ]+[\/]?[\>]//g' $1
和这个
sed -r 's/[\<][\/]?[.]*[\/]?[\\]?[\>]//g' $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!部分及其后的详细说明。