我需要使用bash脚本在一对给定标签之间获取HTML内容.例如,使用以下HTML代码:
<html>
<head>
</head>
<body>
text
<div>
text2
<div>
text3
</div>
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
使用bash命令/脚本,给定body标签,我们将获得:
text
<div>
text2
<div>
text3
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
提前致谢.
Ken*_*ent 12
纯文本处理不适合html/xml解析.我希望这可以给你一些想法:
kent$ xmllint --xpath "//body" f.html
<body>
text
<div>
text2
<div>
text3
</div>
</div>
</body>
Run Code Online (Sandbox Code Playgroud)
BMW*_*BMW 10
在shell/bash中使用sed,因此您无需安装其他内容.
tag=body
sed -n "/<$tag>/,/<\/$tag>/p" file
Run Code Online (Sandbox Code Playgroud)
我个人觉得从包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
Run Code Online (Sandbox Code Playgroud)
得到你需要的东西.干净利落.
另一种选择是使用多平台xidel实用程序(SourceForge 主页、GitHub 存储库),它可以处理 XML 和 HTML:
xidel -s in.html -e '/html/body/node()' --printed-node-format=html
Run Code Online (Sandbox Code Playgroud)
上面打印了带有语法突出显示(彩色)的结果 HTML,并且节点后面似乎有一个空行text。
如果您只需要文本,Reino指出您可以简化为:
xidel -s in.html -e '/html/body/inner-html()'
Run Code Online (Sandbox Code Playgroud)
忘记 Bash 由于它的限制,你可以使用nokogiri作为命令行工具,如解释here。
例子:
curl -s http://example.com/ | nokogiri -e 'puts $_.search('\''a'\'')'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
34839 次 |
| 最近记录: |