我需要在一堆 HTML 文件中找到所有位置,它们位于以下结构(CSS)中:
div.a ul.b
或 XPath:
//div[@class="a"]//div[@class="b"]
grep
在这里对我没有帮助。是否有一个命令行工具可以返回与此标准匹配的所有文件(以及可选的所有位置)?即,如果文件匹配某个 HTML 或 XML 结构,则返回文件名。
我需要在一堆 HTML 文件中找到所有位置,它们位于以下结构(CSS)中:
div.a ul.b
或 XPath:
//div[@class="a"]//div[@class="b"]
grep
在这里对我没有帮助。是否有一个命令行工具可以返回与此标准匹配的所有文件(以及可选的所有位置)?即,如果文件匹配某个 HTML 或 XML 结构,则返回文件名。
尝试这个:
aptitude install html-xml-utils
brew install html-xml-utils
hxnormalize -l 240 -x filename.html | hxselect -s '\n' -c "label.black"
"label.black"
唯一标识 HTML 元素名称的 CSS 选择器在哪里。编写一个名为的帮助脚本cssgrep
:
#!/bin/bash
# Ignore errors, write the results to standard output.
hxnormalize -l 240 -x $1 2>/dev/null | hxselect -s '\n' -c "$2"
然后你可以运行:
cssgrep filename.html "label.black"
这将为label
类的所有 HTML 元素生成内容black
。
该-l 240
参数对于避免解析输出中的换行符很重要。例如,如果<label class="black">Text to \nextract</label>
是输入,则将-l 240
HTML 重新格式化为<label class="black">Text to extract</label>
,在第 240 列插入换行符,这简化了解析。也可以扩展到 1024 或更高。
也可以看看:
我已经用 Node JS 构建了一个命令行工具,它就是这样做的。您输入一个 CSS 选择器,它将搜索目录中的所有 HTML 文件,并告诉您哪些文件与该选择器匹配。
您需要将 Element Finder 安装cd
到要搜索的目录中,然后运行:
elfinder -s "div.a ul.b"
有关更多信息,请参阅http://keegan.st/2012/06/03/find-in-files-with-css-selectors/
pup是一个用于处理 HTML 的命令行工具。它从标准输入读取,打印到标准输出,并允许用户使用 CSS 选择器过滤页面的某些部分。
受 jq 的启发,pup 旨在成为一种从终端探索 HTML 的快速灵活的方式。
例子:
$ wget http://en.wikipedia.org/wiki/Robots_exclusion_standard -O robots.html
$ pup --color 'title' < robots.html
<title>
Robots exclusion standard - Wikipedia, the free encyclopedia
</title>