Regex 从网页中删除所有HTML标记

Regex 从网页中删除所有HTML标记,regex,bash,sed,html-parsing,Regex,Bash,Sed,Html Parsing,我正在用curl编写bashshell脚本。如果curl命令返回任何文本,我知道我有错误。curl返回的文本通常为HTML格式。我想如果我能去掉所有的HTML标记,我就可以将结果文本显示为错误消息 我在想这样的事情: sed -E 's/<.*?>//g' <<<$output_text sed-E的///g'sed不支持非贪婪 试一试 's/]*>//g' GNU的代码: sed'///g/ 也许是基于解析器的perl解决方案 perl -0777 -MHTM

我正在用
curl
编写bashshell脚本。如果curl命令返回任何文本,我知道我有错误。
curl
返回的文本通常为HTML格式。我想如果我能去掉所有的HTML标记,我就可以将结果文本显示为错误消息

我在想这样的事情:

sed -E 's/<.*?>//g' <<<$output_text

sed-E的///g'sed不支持非贪婪

试一试

's/]*>//g'
GNU的代码:


sed'///g/ 也许是基于解析器的perl解决方案

perl -0777 -MHTML::Strip -nlE 'say HTML::Strip->new->parse($_)' file.html
必须使用
cpan HTML::Strip
命令安装模块

或者

您可以使用名为:
textutil

将生成带有剥离html标记的
file.txt
,或

textutil -convert txt -stdin -stdout < file.txt | some_command
但在您的情况下,您只能依赖纯
sed
awk
解决方案。。。伊姆霍

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

perl -0777 -pe 's/<.*?>//sg'
perl-0777-pe的///sg'
因为也将删除下一个(多行和公共)标记:


如果要删除所有HTML标记和所有脚本标记(及其内容),可以使用以下命令:

sed 's/<script>.*<\/script>//g;/<script>/,/<\/script>/{/<script>/!{/<\/script>/!d}};s/<script>.*//g;s/.*<\/script>//g' $file -i && sed '/</ {:k s/<[^>]*>//g; /</ {N; bk}}' $file -i && sed -r '/^\s*$/d' $file -i

sed的/*//g;////{/!{/!d};s/*//g;s/*//g'$file-i&&sed'///g;/。一个简单的例子:
@glennjackman稍等片刻,我想你可能会链接到我的许多文章中的一篇,我在那里阐述了这一点。
sed
实际上只是一个macguffin。我不想关闭我的问题,因为我没有显示我的代码。我真正希望的是有人说“嘿,白痴,如果你是这样一个Unix专家,为什么不直接使用*foo*?这就是*foo*的用途。它在所有Unix/Linux操作系统上都可以使用。”我会用Perl来做,但Perl不包括任何HTML解析模块,在这种情况下我无法安装它们。太多的系统,我无法控制它们,这就是问题所在。如果我可以安装Perl模块,这将是一个简单的Perl问题。不幸的是,我的脚本是一个安装程序,我正在安装Jenkins的软件包。我使用一系列脚本远程升级构建、锁定构建和更改构建描述。这些脚本运行在数百台服务器上,我无法在所有这些服务器上安装Perl模块,而且它们实际上不是我的机器。我必须让它来做。否则,我将使用HTML::Strip和LWP,并用Perl编写所有内容。这正是我想要的!将HTML内容转换为纯文本的Unix工具。我从未使用过
textutil
,而且效果很好。不幸的是,我们的服务器是Linux:-(.我已经使用Unix将近三十年了(嗯,不是真的,我使用的第一个类Unix系统是Xenix),我想不出一个工具可以做到这一点。我喜欢
textutil
,它几乎在所有Unix平台上都有,但从来没有在Linux上实现过。@DavidW。您无法确保Linux上的命令可用性。有些安装有一些软件包,而另一些则没有。您的问题是
OS X
,因此在Linux上添加了OS X解决方案。:)(或freebsd)这要困难得多,因为你无法预测安装了什么工具。但是,还要添加一个Linux解决方案:)textutil帮我省了很多钱,谢谢!你可能是对的。
sed中有一个标志(无论是
-E
还是
-r
都将打开高级正则表达式,并且
sed
手册页链接到
re_格式
手册页,该手册页讨论了非贪婪限定符。我可能只需要切换到旧的备用。这起作用了。下面是翻译的错误:
apachetomcat/7.0.27-错误报告HTTP Status 404-type Status reportmessage description请求的资源()不可用。Apache Tomcat/7.0.27
。这正是我想要的。去掉
和所有其他标记,这样我可以更清晰地看到
404
错误消息。
lynx -dump file.html #or
lynx -stdin -dump < file.html
perl -0777 -pe 's/<.*?>//sg'
<a
 href="#"
 class="some"
>link text</a>
sed 's/<script>.*<\/script>//g;/<script>/,/<\/script>/{/<script>/!{/<\/script>/!d}};s/<script>.*//g;s/.*<\/script>//g' $file -i && sed '/</ {:k s/<[^>]*>//g; /</ {N; bk}}' $file -i && sed -r '/^\s*$/d' $file -i