Инструменты для поиска строк внутри файлов без индексации [закрыто]


170

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

Поиск в Visual Studio в "текущем проекте" невероятно медленный, и я не доверяю Windows Search.

Итак, какой лучший бесплатный инструмент поиска неиндексированного текста? Все, что нужно сделать, это вернуть список с файлами, которые содержат искомую строку внутри папки и ее подпапок.

Я использую Windows 2003 Server.


010 Editorпоиск файлов huuuge за 0 секунд
Мортеза Зияе

Depeche View опережает все остальное на этой странице. Есть несколько ярлыков, которые вы хотите потратить пару минут, чтобы прочитать файл справки и изучить его. stahlworks.com/dev/depeche-view.html
Б.В. Вернон

Я тоже часто этим пользуюсь, но это заставляет вас нажимать на каждый файл результатов, чтобы увидеть совпадения содержимого на правой панели. Также содержимое файла на правой панели не масштабируется (размер шрифта слишком мал).
Meryan

Это хороший вопрос для разработки программного обеспечения, но оффтоп на SO. Какой сайт сети SE это по теме? См., Например, вопросы SE.SE по «поисковой базе кода». Мы должны перенести этот вопрос, чтобы его можно было открыть снова !
сентября

1
Посмотрите на File Content Finder в магазине приложений (отказ от ответственности - я разработчик). Он может выполнять поиск в текстовых / исходных файлах, а также в файлах pdf, doc (x), xls (x) и даже в отсканированных файлах jpg / png - microsoft.com/en-au/p/file-content-finder/9mzc4sk6j6bp
Geo Systems

Ответы:


60

Оригинальный ответ

Windows Grep делает это действительно хорошо.

Изменить: Windows Grep больше не поддерживается и не предоставляется разработчиком. Альтернативная ссылка для скачивания здесь: Windows Grep - альтернативный

Текущий ответ

Visual Studio Code обладает отличными возможностями поиска и замены файлов. Это очень быстро, поддерживает регулярные выражения и предварительный просмотр перед заменой.

введите описание изображения здесь



10
На моей машине (Windows 7) он дважды ломался. Я попробую что-нибудь еще.
Б. Клэй Шеннон

2
Он старый, у меня тоже разбился. Даже если не идеально подходит для некоторых целей, grepWin лучше imoh
Paolo

9
AstroGrep также быстро , и это не-Установите фильтры и соберите
Зорб

У меня нормально
работало

364

Я фанат диалога Find-In-Files в Notepad ++ . Бонус : это бесплатно.

введите описание изображения здесь


К сожалению, который не может - или не - искать все файлы Microsoft Word. Я подозреваю, что есть разница между ".doc" и ".docm"
Карл Виттофт

11
@CarlWitthoft .docm, вроде бы .docx, .xlsmи .xlsxна самом деле являются XML-документами.
Ян Бойд

1
он хорошо работает для небольших папок с обычным количеством файлов, зависает для больших папок с большим количеством файлов, по крайней мере, когда я использую свой ноутбук. Немного быстрее при использовании мощного ПК. Более того, пока он ищет, не может открыть другие файлы.
Мохаммед Джорайд

Нашел мой текст. Однако не позволил мне выбрать в результатах какие значения заменить, а какие оставить. Все или ничего?
ofer.sheffer

5
Даже не подозревал, что это был вариант в Notepad ++. Отличное решение для поиска недостающих файлов! Однако, похоже, что у него проблемы с файлами большого размера. Иногда выдает ошибку «файл слишком большой, чтобы открыть».
Джон Август

167

Существует также встроенная программа Windows, findstr.exeс помощью которой вы можете искать в файлах.

>findstr /s "provider=sqloledb" *.cs

3
Просто и эффективно!
Маркус Фантоне

Это намного быстрее, чем Windows Explorer, и на самом деле нашел текст, который я искал, тогда как использование Windows Explorer не дало результатов поиска для меня. Спасибо.
mbomb007

1
Для меня лучший ответ на эту тему, потому что вам не нужно ничего устанавливать. В моем случае мне пришлось дополнить добавление некоторых аргументов, потому что слишком много информации, чтобы появиться на экране. Аргумент / M содержит только имя файла с информацией, которую я искал. Чтобы получить доступ к руководству команды findstr, введите "findstr /?" в консоли.
Александр Рибейро

Это полезная утилита, но, похоже, она не может читать кириллицу в именах файлов. Например:FINDSTR: Cannot open ???????????.txt
Артем Руссаковский

1
findstr не поддерживает текст UTF16.
Дэвид Бремнер

34

Мне нравится АстроГреп. Результаты показаны в списке. Щелчок по строке показывает всю строку в качестве предварительного просмотра, выделяющего попадание. Кажется, он довольно быстрый, скудный и бесплатный. Протестировано на Windows 7, 8, 10 и Windows Server 2008 R2. Позволяет регулярные выражения.

Последний скриншот AstroGrep

AstroGrep - это утилита поиска файлов с графическим интерфейсом Microsoft Windows (grep). Его функции включают в себя регулярные выражения, универсальные параметры печати, хранит последние использованные пути и имеет функцию «контекста», которая очень удобна для просмотра исходного кода.

Ссылка: АстроГреп


7
От всех других перечисленных здесь, это единственное, что позволяет указать шаблоны исключения для папок. Очень полезно при попытке пропустить папки типа node_modulesили bower_components.
Mrchief

1
Очень хорошее программное обеспечение, быстрое, настраиваемое и показывать файлы вместе с соответствующим контекстом
HanniBaL90

1
И «быстрый» заслуживает второго упоминания ...self == happy
cssyphus

9

Поиск в Visual Studio по папкам - самый быстрый, который я нашел.

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

VS2010 на обычном жестком диске без SSD занимает 1 минуту для поиска в папке размером 20 ГБ с 26k-файлами, исходным кодом и двоичными файлами. Обыскиваются файлы 15k - остальные, скорее всего, пропускаются из-за того, что они являются двоичными файлами. Последующие поиски в той же папке занимают порядка секунд (до тех пор, пока содержимое не будет удалено из кэша).

Следующим ближайшим к той же папке, который я нашел, был grepWin. Около 3 минут. Я исключил файлы размером более 2000 КБ (по умолчанию). Параметр «Включить двоичные файлы», похоже, ничего не делает в плане ускорения поиска, похоже, что двоичные файлы все еще затрагиваются (ошибка?), Но они не отображаются в результатах поиска. Все последующие поиски занимают те же 3 минуты - не могут использовать кеш жесткого диска. Если я ограничу файлы размером менее 200 Кб, начальный поиск будет длиться 2,5 минуты, а последующие поиски будут занимать порядка секунд, примерно так же быстро, как VS - в кэше.

Агент Ransack и FileSeek работают очень медленно в этой папке, около 20 минут, из-за поиска по всему, включая гигантские двоичные файлы размером в несколько гигабайт. По данным Resource Monitor, они осуществляют поиск со скоростью около 10-20 МБ в секунду.

ОБНОВЛЕНИЕ: Агент Ransack может быть настроен на поиск файлов определенных размеров, и с использованием ограничения <200 КБ это 1: 15 минут для нового поиска и 5 секунд для последующих поисков. Быстрее, чем grepWin и так же быстро, как VS в целом. На самом деле очень приятно, если вы хотите сохранить несколько поисков во вкладках, и вы не хотите загрязнять список недавно найденных папок VS, и вы хотите сохранить возможность поиска в двоичных файлах, чего, похоже, VS не хочет делать. Агент Ransack также создает запись в контекстном меню проводника, поэтому его легко запустить из папки. То же, что и grepWin, но более приятный и быстрый интерфейс.

Моя новая настройка поиска - Agent Ransack для содержимого и Все для имен файлов (отличный инструмент, мгновенные результаты!).


3

Если вы не хотите устанавливать инструменты сторонних разработчиков, загрузите STRINGS.EXE с Microsoft Sysinternals и выполните процедуру, подобную этой:

@echo off
if '%1' == '' goto NOPARAM
if '%2' == '' goto NOPARAM
if not exist %1 goto NOFOLDER

echo ------------------------------------------
echo - %1 : folder
echo - %2 : string to be searched in the folder
echo - PLEASE WAIT FOR THE RESULTS ...
strings -s %1\* | findstr /i %2 > grep.txt
notepad.exe grep.txt

goto END

:NOPARAM rem - input command not correct
echo ====================================
echo Usage of GREP.CMD:
echo   Grep "SearchFolder" SearchString
echo Please specify all parameters
echo ====================================
goto END

:NOFOLDER
echo Folder %1 does not exist
goto END

:END rem - exit
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.