【问题标题】:Sed remove tags from html filesed 从 html 文件中删除标签
【发布时间】:2013-11-21 14:01:33
【问题描述】:

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

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

还有这个

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

但我还是想念一些东西,有什么建议吗??

【问题讨论】:

  • 这是我最喜欢的关于 HTML 和正则表达式的答案 ;-) stackoverflow.com/questions/1732348/…
  • 我完全知道,但这是一个家庭作业:-(
  • 我的上学时间是很久以前的事了,但我认为家庭作业不一定能给出完美的答案。这也是为了表现出一些努力,并有勇气说,这就是我想出的全部。 :-)

标签: html regex linux bash


【解决方案1】:

您可以使用众多HTML to text converters 之一,如果可能,使用Perl 正则表达式&lt;.+?&gt;,或者如果必须是sed,则使用&lt;[^&gt;]*&gt;

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

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

<div
>Lorem ipsum</div>

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


这个正则表达式由&lt;[^&gt;]*&gt;三部分组成

  • 搜索开张&lt;
  • 后跟零个或多个字符*,不是结束&gt;
    [...]character class,当它以^ 开头时查找字符不是 在课堂上
  • 最后寻找关闭&gt;

更简单的正则表达式&lt;.*&gt; 将不起作用,因为它会搜索最长的匹配项,即输入行中最后一个关闭&gt;。例如,当您在输入行中有多个标签时

<name>Olaf</name> answers questions.

将导致

回答问题。

而不是

Olaf 回答问题。

另请参阅Repetition with Star and Plus,尤其是Watch Out for The Greediness! 和以下部分,了解详细说明。

【讨论】:

  • 工作就像一个魅力.. 我很讨厌 sed,所以你能解释一下 ]*> 位吗?
  • [^&gt;] 是一个字符类,它匹配除&gt; 之外的任何字符,* 表示重复匹配零次或多次。否则,&lt;.*&gt; 将从该行的第一个 &lt; 匹配到最后一个 &gt;,通常跨越多个标签。
  • 完美,我需要使用grep -Ev "&lt;.*&gt;" 过滤掉 HTML 标签其中的内容。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-17
  • 1970-01-01
  • 2014-11-16
  • 2020-12-27
  • 1970-01-01
  • 1970-01-01
  • 2017-03-06
相关资源
最近更新 更多