Назад | Перейти на главную страницу

Искать внутри текстовых файлов

Итак, вот ситуация. В настоящее время у меня есть почтовый сервер для моей небольшой некоммерческой компании. Мой почтовый сервер (Merak Mail Server) хранит журналы в файлах .log и почту в виде файлов .tmp. По сути, это просто текстовые файлы, которые хранятся на сервере.

Проблема в том, что когда я помещаю текст в поле «Содержит текст» в проводнике Windows, он всегда пропускает файлы и сообщает мне, что результаты не возвращаются. Затем, когда я ищу файлы один за другим (в лучшем случае болезненно), я нахожу нужные мне файлы.

Я недостаточно хорошо разбираюсь в функции поиска, или, может быть, я неправильно индексирую. Мне действительно все равно, что мне нужно использовать для поиска файлов, меня устраивает даже стороннее приложение, я просто хочу ввести адрес электронной почты в поле и выполнить поиск во всех моих файлах журналов или файлах электронной почты и найти какой я ищу. Это может быть Windows Search или что-то еще, если я найду способ выполнить свою работу, я буду счастлив. Платные решения тоже подходят.

Спасибо всем заранее.

Я бы сказал дать WinGrep выстрел.

Если они все в одном каталоге, я вижу, что вам поможет двухэтапный процесс.

Шаг 1. Командная строка

Откройте оболочку CMD и перейдите в каталог, который вы ищете. Затем введите команду find:

F:\directory> find "user.name@org.org" *

Затем он будет искать во всех файлах этого каталога искомую строку. Когда он найдет его, он даст вам имя файла, например:

---------- MSGTRK20090603-1.LOG
2009-06-03T09:11:37.486Z,192.168

Что скажет вам, в каком файле искать внутри.

Шаг 2: поиск внутри файла

Этот шаг вам уже известен. Первый шаг - это просто сузить область поиска.

Используйте findstr в командной строке!

C:\>findstr /?
Searches for strings in files.

FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/P] [/F:file]
        [/C:string] [/G:file] [/D:dir list] [/A:color attributes] [/OFF[LINE]]
        strings [[drive:][path]filename[ ...]]

  /B         Matches pattern if at the beginning of a line.
  /E         Matches pattern if at the end of a line.
  /L         Uses search strings literally.
  /R         Uses search strings as regular expressions.
  /S         Searches for matching files in the current directory and all
             subdirectories.
  /M         Prints only the filename if a file contains a match.    
  etc.


Example:
C:\>findstr /s /m my.name@domain.com c:\temp\*.txt c:\temp\*.log
c:\temp\t\t.log
c:\temp\t\t.txt
c:\temp\t\tt.log
c:\temp\tt.txt

Redirect to a file and open in notepad:
C:\>findstr /s /m my.name@domain.com c:\temp\*.txt c:\temp\*.log > c:\temp\myemail.txt & notepad c:\temp\myemail.txt 

Вы можете сделать это одним из двух способов (я уверен, что их больше, но вот что я бы сделал)

  1. Установите Microsoft Desktop Search, вы можете сделать это на сервере или рабочей станции и проиндексировать файлы. Он должен видеть, что это текстовые файлы, и индексировать их содержимое. Это будет более быстрый из двух способов. Это, кстати, бесплатно.

  2. Используйте расширенный текстовый редактор, такой как Notepad ++ или Textpad, и используйте параметр «файл в файлах», который будет искать все файлы в каталоге. Но это займет больше времени, если вам нужно будет запустить поиск. Notepad ++ является бесплатным, Textpad имеет небольшую стоимость, но его можно попробовать.

Если это то, что вам нужно делать часто, я бы выбрал 1. Если это случается нечасто, попробуйте 2 и посмотрите, сработает ли это для вас.

Мне нравится UltraEdit за это. Вы можете указать ему найти все файлы в каталоге (или ограничить его определенными типами файлов или любым другим подстановочным знаком) для указанной вами строки. Если он находит ваш текст в нескольких файлах или несколько раз в файле, он дает вам список всех найденных экземпляров, и щелчок по одному из них приведет вас к этому файлу / местоположению.

Затем используйте powershell:

select-string -path c: \ mylogfiledir * .log -pattern "моя строка"

Обратите внимание, что в powershell v2 вы также можете использовать переключатель -context, чтобы получить строки выше и ниже строки, где было найдено совпадение.

Ты можешь использовать подтверждать «Программа типа grep специально для больших деревьев исходного кода». Ack похож на grep, но написан на Perl (отлично работает в Windows). Вот причины, по которым он предположительно лучше, чем grep:

  1. Это невероятно быстро, потому что ищет только то, что вы хотите найти.
  2. ack - это чистый Perl, поэтому он отлично работает в Windows.
  3. Автономная версия не использует нестандартных модулей, поэтому вы можете без опасений поместить ее в свой ~ / bin.
  4. По умолчанию выполняет рекурсивный поиск по каталогам, игнорируя .svn, CVS и другие каталоги VCS. * Что бы вы предпочли набрать? $ grep шаблон $ (find. -type f | grep -v '.svn') шаблон $ ack
  5. ack игнорирует большую часть дерьма, которое вы не хотите искать * каталоги VCS * blib, каталог сборки Perl * файлы резервных копий, такие как foo ~ и # foo # *, двоичные файлы, дампы ядра и т. д.
  6. Игнорирование каталогов .svn означает, что ack быстрее, чем grep, для поиска в деревьях.
  7. Позволяет указать типы файлов для поиска, например --perl или --nohtml. * Что бы вы предпочли набрать? $ grep шаблон $ (найти. -имя '.pl '-или-имя'.pm '-или -name' * .pod '| grep -v .svn) $ ack --perl pattern Обратите внимание, что ack --perl также проверяет строки shebang файлов без суффиксов, чего не будет делать команда find.
  8. Возможности фильтрации файлов, которые можно использовать без поиска с помощью ack -f. Это позволяет вам создавать списки файлов заданного типа. $ ack -f --perl> все файлы perl
  9. Цветовое выделение результатов поиска.
  10. Использует настоящие регулярные выражения Perl, а не подмножество GNU.
  11. Позволяет указать вывод с помощью специальных переменных Perl * Пример: ack '(Mr | Mr? S). (Смит | Джонс) '--output =' $ & '
  12. Многие параметры командной строки такие же, как в GNU grep: -w выполняет поиск только по словам -c показывает количество совпадений на файл -l дает имя файла вместо совпадающих строк и т. Д.
  13. В имени команды для ввода на 25% меньше символов! Экономьте дни свободного времени! Черт возьми, это на 50% короче по сравнению с grep -r.

Я никогда не ищу / не находю окна из-за таких вещей. Обычно я выполняю поиск через старую добрую командную строку. Результаты на 99% быстрее и точнее, чем в графическом интерфейсе поиска / поиска.

c:
cd \
dir /s *.log *.tmp

Вы даже можете передать результаты в найти команда если вы хотите искать в результатах.

Не забывайте, что Logparser также может быть хорошей утилитой для синтаксического анализа текста / поиска. Для форматов 'TEXTWORD и TEXTLINE input' и 'CSV and TSV input' стоит запустить logparser -i: INPUTFORMATYOUWISHTOKNOWMOREABOUT -h 'help'. Примеры также есть в файлах «помощи».

я использую Агент Рэнсак и он отлично работает. Он также присоединяется к контекстному меню, поэтому вы можете щелкнуть папку правой кнопкой мыши и сказать Agent Ransack, и он будет искать там. О, и самое лучшее, это бесплатно.

Я использую это для поиска внутри текстовых файлов, а также временных папок, в которых обычный поиск из Windows не выполняет поиск.

Надеюсь, поможет.

я использую PsPad (бесплатный расширенный текстовый редактор) для аналогичного поиска в журнале. Если вы пойдете в Поиск -> Поиск / замена в файлах вы можете искать любую текстовую строку в наборе файлов в определенном каталоге.

Если вы хотите использовать проводник Windows:

Нажмите "Изменить настройки". Изменить поведение поиска файлов и папок. Убедитесь, что выбран вариант "расширенный".

Щелкните дополнительные параметры. Убедитесь, что выбран параметр «Скрытые файлы и папки»

Затем "Инструменты" Параметры папки "Просмотр" Установите флажок "показать скрытые файлы и папки" Снять отметку "скрыть расширения для известных типов файлов" Снять отметку "скрыть защищенные системные файлы"

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

Затем в командной строке введите

grep -H email@example.org * .tmp >> output.txt

Это даст вам выходной файл с именами файлов (и строкой с адресом электронной почты).

Я бы сказал, что это работа для WildReplace . WildReplace абсолютно бесплатен и хорош только для поиска в текстовых файлах, таких как файлы .xml.

Wildreplace делает все, что делают grepWin и WinGrep, и, на мой взгляд, лучше отображает результаты.

Windows не выполняет поиск текста во всех файлах. См. Статью http://support.microsoft.com/kb/309173. Можно добавить записи в реестр, которые будут добавлять типы файлов, которые будут найдены при таком стиле поиска.

Поиск Windows по умолчанию ищет имена файлов в неиндексированных местах и ​​ищет имена файлов и его содержимое в проиндексированных местах. Но вы можете изменить это, перейдя в Инструменты-> Параметры папки-> вкладка Поиск.

Если вы не можете найти расширение файла в списке индексирования, вы можете добавить его с помощью дополнительных параметров индексирования:

Удивительно, что об этом никто не говорил.