我需要使用sed命令从bash脚本中删除所有标签。 我试着用这个Sed从html文件中删除标签
sed -r 's/[\<][\/]?[a-zA-Z0-9\=\"\-\#\.\& ]+[\/]?[\>]//g' $1
和蒙山这个
sed -r 's/[\<][\/]?[.]*[\/]?[\\]?[\>]//g' $1
但我还是错过了什么,有什么建议?
我需要使用sed命令从bash脚本中删除所有标签。 我试着用这个Sed从html文件中删除标签
sed -r 's/[\<][\/]?[a-zA-Z0-9\=\"\-\#\.\& ]+[\/]?[\>]//g' $1
和蒙山这个
sed -r 's/[\<][\/]?[.]*[\/]?[\\]?[\>]//g' $1
但我还是错过了什么,有什么建议?
您可以使用许多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!及以下,为详细解释。
工程就像一个魅力..虽然我吸吮sed,所以你可以请解释<[^>] *>位? –
'[^>]'是一个匹配任何字符的字符类,除了'>'和'*'表示重复匹配零次或多次。否则,'<.*>'将从第一个'<'到最后一个'>'匹配,通常跨越多个标签。 – tripleee
这是我最喜欢的关于HTML和正则表达式的答案;-) http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 –
我完美无缺知道它,但这是作业:-( – michste93
我的学校时间很久以前,但我认为作业并不一定是一个完美的答案,它也是要表现出一些努力,并有勇气说,那就是所有我想出来的。:-) –