从网页中删除所有HTML标记

Dav*_* W. 4 regex bash sed

我正在做一些BASH shell脚本curl.如果我的curl命令返回任何文本,我知道我有一个错误.返回的文本curl通常是HTML格式.我想如果我可以删除所有HTML标记,我可以将结果文本显示为错误消息.

我在考虑这样的事情:

sed -E 's/<.*?>//g' <<<$output_text
Run Code Online (Sandbox Code Playgroud)

但我明白了 sed: 1: "s/<.*?>//": RE error: repetition-operator operand invalid

如果我更换*?*,我没有得到错误(我没有得到任何的文字要么).如果我删除global(g)标志,我会得到相同的错误.

这是在Mac OS X上.

Ken*_*ent 5

sed不支持非贪心.

尝试

's/<[^>]*>//g'
Run Code Online (Sandbox Code Playgroud)


jm6*_*666 5

也许基于解析器的 perl 解决方案?

perl -0777 -MHTML::Strip -nlE 'say HTML::Strip->new->parse($_)' file.html
Run Code Online (Sandbox Code Playgroud)

您必须使用命令安装HTML::Stripcpan HTML::Strip模块。

或者

您可以使用名为的标准 OS X 实用程序:textutil 请参阅手册页

textutil -convert txt file.html
Run Code Online (Sandbox Code Playgroud)

将生成file.txt剥离的 html 标签,或者

textutil -convert txt -stdin -stdout < file.txt | some_command
Run Code Online (Sandbox Code Playgroud)

另一种选择

有些系统安装了lynx纯文本浏览器。您可以使用:

lynx -dump file.html #or
lynx -stdin -dump < file.html
Run Code Online (Sandbox Code Playgroud)

但就你而言,你只能依靠纯sedawk解决方案......恕我直言。

但是,如果您有 perl (并且只是没有 HTML::Strip 模块),那么下一个仍然更好,因为sed

perl -0777 -pe 's/<.*?>//sg'
Run Code Online (Sandbox Code Playgroud)

因为也会删除下一个(多行和公共)标签:

<a
 href="#"
 class="some"
>link text</a>
Run Code Online (Sandbox Code Playgroud)