在本地搜索HTML文件而没有匹配的标签或脚本


2

有时我需要在包含HTML文档的本地目录中搜索特定的单词。通常,我使用一个称为File Locator Pro的程序,该程序在大多数情况下都能正常运行。

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

有什么方法可以对许多HTML文件中的HTML文件内容进行搜索,而搜索将忽略HTML标签和脚本?

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

Answers:


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文件,这-E对于A或B结构需要扩展的正则表达式(grep选项)(A|B)

这可能有点令人费解,但是您不能使用正则表达式来解析html并不能使用(X)HTML解析器来解析每个文件,然后仅查找文本听起来也很复杂。


0

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

另一种方法是安装cygwin,然后照常使用grep。


0

Windows命令行(仍然)不如* nix系统强大—但是即使在那里,您的情况和愿望也无法轻松解决。正如@Tensibai所说:您基本上是想分析文件中基于上下文的事件。如今,Windows轻量级grep称为findstr,它比旧的find更好,但功能远没有grep强大。如果您像@ fab2s建议那样安装cygwin,则可能可以构建执行以下操作的脚本:

  • 查找您感兴趣的所有文件(* .html)[ 查找 ]
  • 用行号输出它们,并且所有换行符都更改为未使用的东西(比如说ControlCharacter),使它们位于一行上,但仍然“ 知道 ”行在哪里结束。[ sed ]
  • 提取所有脚本块和包装器标签[ sed ..再次]
  • 反转换行符[ sed ]

..最后

  • grep为您的结果[ grep ]
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.