在本地搜索 HTML 文件而不匹配标签或脚本

在本地搜索 HTML 文件而不匹配标签或脚本

我有时需要在包含 HTML 文档的本地目录中搜索特定单词。通常我会使用名为 File Locator Pro 的程序,大多数情况下它都很好用。

但是,在某些情况下,我要查找的单词是 JavaScript 或 HTML 中常用的关键字或变量名,例如“child”。在这种情况下,由于此搜索仅针对原始文件内容,因此搜索结果会包含来自脚本或标签的数千个无用匹配项。

有没有什么方法可以让我在许多 HTML 文件中搜索 HTML 文件内容并且搜索将忽略 HTML 标签和脚本?

这不一定非要使用 File Locator Pro;任何解决方案都值得关注,但最好是在 Windows 上运行并且不需要其他昂贵软件的解决方案。

答案1

我将使用一个著名的移植到 Windows 的 Linnux 工具:grep

现在,您必须执行一些棘手的链接部分,以首先匹配您想要的内容,然后使用类似这样的搜索来过滤最多的误报age<image...>在我的测试用例中匹配标签和一些 js):

grep -ri 'age' * | grep -v '<script[^>]+>[^<]+<\/script>' | grep -v '<[^>]*age[^>]*>' | grep -E '^[^.]*\.(php|html)'

它的作用如下(每个 grep 命令):

  • 它首先获取所有包含age递归-r和不区分大小写的行-i
  • 然后它匹配<script*>*</script>块内除内容之外的所有内容(-v反转匹配),从匹配中删除脚本块
  • 第三个从标签内删除匹配,这可能会排除有效结果,例如<div id=age>age</div>如果标签与搜索词位于同一行。
  • 最后,它会根据文件名过滤结果,只保留 php 或 html 文件,这需要扩展正则表达式(grep 选项-E)来进行 A 或 B 构造(A|B)

这可能有点复杂,但你无法使用正则表达式解析 html并使用 (X)HTML 解析器解析每个文件然后仅找到文本,这听起来也相当复杂。

答案2

在 Windows 上,您可以使用grepwin(来自 tortoise dev)在 windows 系统中使用 gui 运行 grep。它几乎可以实现 gnu grep 的所有功能。

另一种方法是安装赛格威然后像平常一样使用 grep。

答案3

Windows 命令行(仍然)不如 *nix 系统那么强大 - 但即使在那里,您的场景和愿望也不容易解决。正如 @Tensibai 所说:您基本上想要解析文件中的上下文事件。Windows 轻量级 grep 现在被称为查找字符串,比旧的好一点寻找是,但没有 grep 那么强大。如果你像 @fab2s 建议的那样安装 cygwin,你大概可以构建一个脚本来执行以下操作:

  • 找到您感兴趣的所有文件 (*.html) [寻找]
  • 输出它们并加上行号,所有换行符都改为未使用的内容(比如说控制角色),使它们位于一行上,但仍然“知道“行结束的位置。[sed]
  • 提取所有脚本块和包装器标签[sed..再次]
  • 反转换行符替换 [sed]

..最后..

  • grep 获取结果 [grep]

相关内容