我需要使用bash脚本在一对给定标签之间获取HTML内容。 例如,使用下面的HTML代码:
<html>
<head>
</head>
<body>
text
<div>
text2
<div>
text3
</div>
</div>
</body>
</html>
使用bash命令/脚本,给定 body 标记,我们会得到:
text
<div>
text2
<div>
text3
</div>
</div>
提前致谢。
答案 0 :(得分:11)
纯文本处理不适合html / xml解析。我希望这可以给你一些想法:
kent$ xmllint --xpath "//body" f.html
<body>
text
<div>
text2
<div>
text3
</div>
</div>
</body>
答案 1 :(得分:8)
在shell / bash中使用sed,因此您无需安装其他内容。
tag=body
sed -n "/<$tag>/,/<\/$tag>/p" file
答案 2 :(得分:8)
我个人认为从包html-xml-utils中使用hxselect
命令(通常在hxclean
的帮助下)非常有用。后者修复(有时会破坏)HTML文件以更正XML文件,第一个允许使用CSS选择器来获取所需的节点。使用-c
选项,它会剥离周围的标记。所有这些命令都适用于stdin和stdout。所以在你的情况下你应该执行:
$ hxselect -c body <<HTML
<html>
<head>
</head>
<body>
text
<div>
text2
<div>
text3
</div>
</div>
</body>
</html>
HTML
得到你需要的东西。简单明了。
答案 3 :(得分:4)
由于存在限制而忘记Bash,您可以使用nokogiri作为命令行util,如here所述。
示例:
curl -s http://example.com/ | nokogiri -e 'puts $_.search('\''a'\'')'
答案 4 :(得分:3)
另一个选择是使用多平台 xidel
实用程序(home page on SourceForge,GitHub repository),它可以同时处理XML和HTML:
xidel in.html -e '/html/body/node()' --printed-node-format=html
答案 5 :(得分:0)
BASH可能是错误的工具。请尝试使用功能强大的Beautiful Soup库来编写Python脚本。
这将是更多的工作,但从长远来看(这里:一小时后),节省的时间将弥补额外的努力。