我需要找到一堆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"
是CSS选择器,用于唯一标识HTML元素的名称。编写一个名为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/
[每位Nat的回答在这里:
Command-line tools that can be called from shell scripts include:
4xpath - command-line wrapper around Python's 4Suite package
XMLStarlet
xpath - command-line wrapper around Perl's XPath library