是否有类似“ CSS选择器”或XPath grep的东西?

问题描述 投票:16回答:3

我需要找到一堆HTML文件中位于以下结构(CSS)中的所有位置:

div.a ul.b

或XPath:

//div[@class="a"]//div[@class="b"]

grep在这里无济于事。是否有一个命令行工具可以返回与此标准相匹配的所有文件(以及其中的所有可选位置)?即,如果文件与某个HTML或XML结构匹配,则返回文件名。

html xml grep selector findinfiles
3个回答
20
投票

尝试一下:

  1. 安装http://www.w3.org/Tools/HTML-XML-utils/
    • Ubuntu:aptitude install html-xml-utils
    • MacOS:brew install html-xml-utils
  2. 保存网页(称为filename.html)。
  3. 运行: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或更高。

另请参见:


8
投票

我已经使用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/


0
投票

[每位Nat的回答在这里:

How to parse XML in Bash?

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
© www.soinside.com 2019 - 2024. All rights reserved.