我正在做一些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上.
也许基于解析器的 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)
但就你而言,你只能依靠纯sed或awk解决方案......恕我直言。
但是,如果您有 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)