2

Иногда мне нужно искать в локальном каталоге, содержащем документы HTML, определенные слова. Обычно я использую программу под названием File Locator Pro, которая прекрасно работает в большинстве случаев.

Однако в некоторых случаях слово, которое я ищу, является часто используемым ключевым словом или именем переменной в JavaScript или HTML, например, например, "child". В таких случаях, поскольку этот поиск выполняется только по необработанному содержимому файла, результаты поиска взрываются тысячами бесполезных совпадений внутри скрипта или тегов.

Можно ли как-нибудь выполнить поиск по содержимому HTML-файлов по многим HTML-файлам, когда поиск будет игнорировать HTML-теги и сценарии?

Это не должно использовать File Locator Pro; любое решение представляет интерес, но желательно такое, которое работает на Windows и не требует другого дорогого программного обеспечения.

3 ответа3

1

Я бы пошел с хорошо известным инструментом linnux, портированным на windows: 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-парсера, чтобы затем найти только текст, звучащий довольно сложно для достижения.

0

В Windows вы можете использовать grepwin (от разработчика черепахи) для запуска grep с графическим интерфейсом в системах Windows. Он может достичь почти все, что может GNU grep.

Другой способ - установить Cygwin, а затем просто использовать grep как обычно.

0

Командная строка Windows (все еще) не такая мощная, как в * nix системах - но даже там ваш сценарий и пожелания не так легко решаются. Как сказал @Tensibai: вы в основном хотите проанализировать файлы для контекстных случаев. Облегченный Windows grep в настоящее время называется findstr, немного лучше, чем старая находка , но нигде не так мощно, как grep. Если вы устанавливаете Cygwin, как @ fab2s, вы можете создать скрипт, который будет выполнять что-то вроде следующего:

  • найти все интересующие вас файлы (* .html) [ найти ]
  • выведите их с номерами строк, и все разрывы строк будут изменены на что-то неиспользуемое в противном случае (скажем, ControlCharacter), в результате чего они будут находиться на одной строке, но все равно будут « знать », где заканчивались строки. [ седь ]
  • извлечь все блоки скриптов и теги-обертки [ sed .. again]
  • обратный перевод строки-замена [ сед ]

..и наконец..

  • grep для ваших результатов [ grep ]

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .