Поиск Windows в строковых файлах

Обновлено: 03.07.2024

Поиск текстовой строки в файле (или нескольких файлах), в отличие от простой команды FIND, FINDSTR поддерживает более сложные регулярные выражения.

При использовании /G или /F текстовый файл должен быть простым текстовым файлом ANSI с одной строкой поиска или именем файла/путем в каждой строке.
Если выполняется поиск более чем в одном файле (/F), к результатам будет добавлен префикс имени файла, в котором был найден текст.

По умолчанию функция FINDSTR соответствует любому слову, поэтому FINDSTR "голубая планета" будет соответствовать слову "голубой" или слову "планета" .
Чтобы сопоставить целую фразу/предложение или использовать регулярные выражения, используйте параметры /C и /R.

Синтаксис параметра

Параметры могут начинаться с префикса / или -
Параметры также могут быть объединены после одного / или -. Однако составной список параметров может содержать не более одного многосимвольного параметра, такого как OFF или F: , и многосимвольный параметр должен быть последним параметром в списке.

Ниже приведены все эквивалентные способы выражения нечувствительный к регистру регулярный поиск любой строки, которая содержит как "привет", так и "до свидания" в любом порядке

FINDSTR /i /r /c:"hello.*goodbye" /c:" до свидания.*привет" Demo.txt
FINDSTR -i -r -c:"привет.*до свидания" /c:"до свидания.*привет" Demo.txt
FINDSTR /irc:"привет.* до свидания" /c:"до свидания.*привет" Demo.txt

Искать более 2 элементов в любом порядке становится непрактичным, так как вам потребуется каждая перестановка. Альтернативным подходом является объединение нескольких команд findstr в цепочку:

FINDSTR /ic:"hello" Demo.txt | findstr /ic:"до свидания"

Регулярные выражения (поиск шаблонов текста)

FINDSTR с параметром /R может использовать следующие метасимволы, имеющие особое значение, в качестве оператора или разделителя. Поддержка FINDSTR для регулярных выражений ограничена и нестандартна, поддерживаются только следующие метасимволы:

Метасимволы наиболее эффективны, когда они используются вместе. Например, комбинация символа подстановки (.) и символа повторения (*) аналогична подстановочному знаку имени файла (*.*)

Выражение .* может быть полезно в более крупном выражении, например, a.*b будет соответствовать любой строке, начинающейся с A и заканчивающейся на B.

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

FINDSTR не поддерживает файлы UTF-16, но FIND поддерживает.< /p>

Якоря позиции строки регулярного выражения ^ и $

^ соответствует началу входного потока, а также любой позиции, следующей за . Поскольку FINDSTR также разбивает строки после , простое регулярное выражение "^" всегда будет соответствовать всем строкам в файле, даже в двоичном файле.
Поэтому, чтобы найти строку snark в начале строки, используйте ^snark

$ соответствует любой позиции, непосредственно предшествующей . Это означает, что строка поиска регулярного выражения, содержащая $, никогда не будет соответствовать ни одной строке в текстовом файле в стиле Unix, а также не будет соответствовать последней строке текстового файла Windows, если в ней отсутствует маркер EOL .
Поэтому, чтобы найти строку snark в конце строки, используйте snark$

Примечание. Как подробно описано ниже, переданный и перенаправленный ввод в FINDSTR может иметь добавление, которого нет в источнике. Это может повлиять на поиск по регулярному выражению, в котором используется $ .

Строка поиска с символами (до ^ ) ИЛИ (после $ ) всегда не сможет найти совпадение. $nevermatches^

Параметры позиции /B /E /X

Позиционные параметры работают так же, как ^ и $ , за исключением того, что они также работают для буквенных строк поиска.

/B работает так же, как ^ в начале строки поиска регулярного выражения.< /p>

/E работает так же, как $ в конце строки поиска регулярного выражения.

/X работает так же, как и ^ в начале, и $ в конце поиска регулярного выражения строка.

FINDSTR – Ограничения экранирования и длины – более подробная информация о том, как использовать строки поиска, содержащие кавычки и/или обратную косую черту. Кроме того, максимальная длина строки поиска зависит от версии ОС.

FINDSTR – поиск по разрывам строк

Диапазоны классов символов регулярных выражений [x-y]

Диапазоны классов символов не работают должным образом. См. этот вопрос/ответ на Stack Exchange: Почему findstr неправильно обрабатывает регистр (в некоторых случаях)?

Проблема в том, что FINDSTR не упорядочивает символы по их значению байтового кода (обычно считается ASCII). код, но ASCII определяется только от 0x00 до 0x7F). Большинство реализаций регулярных выражений будут рассматривать [A-Z] как все прописные английские буквы верхнего регистра. Но FINDSTR использует последовательность сопоставления, которая примерно соответствует тому, как работает SORT.Таким образом, [AZ] включает полный английский алфавит, как верхний, так и нижний регистр (кроме "a"), а также неанглийские буквенные символы с диакритическими знаками.

Регулярное выражение FINDSTR сортирует нижний регистр перед прописным. . Таким образом, findstr /nrc:"^[A-a]" ничего не найдет, но findstr /nrc:"^[a-A]" будет соответствовать.

Тип поиска по умолчанию: буквальное или регулярное выражение

/C:"string" – соответствие по умолчанию аналогично литеральному /L, но также может принимать пробелы.

/R /C:"Search string" – будет выполнено соответствие регулярному выражению. , но также принимает пробелы в строке поиска.

"строковый аргумент" — значение по умолчанию зависит от содержимого самой первой строки поиска. (Помните, что это используется для разделения строк поиска.) Если первая строка поиска является допустимым регулярным выражением, содержащим хотя бы один неэкранированный метасимвол, то все строки поиска обрабатываются как регулярные выражения. В противном случае все строки поиска рассматриваются как литералы. Например, "51.4 200" будет рассматриваться как два регулярных выражения, поскольку первая строка содержит неэкранированную точку, тогда как "200 51.4" будет рассматриваться как два литерала, поскольку первая строка не содержит метасимволов.

/G:file — значение по умолчанию зависит от содержимого первой непустой строки в файле. Если первая строка поиска является допустимым регулярным выражением, содержащим хотя бы один неэкранированный метасимвол, то все строки поиска рассматриваются как регулярные выражения. В противном случае все строки поиска обрабатываются как литералы.

Рекомендация. Всегда явно указывайте параметр литерала /L или параметр регулярного выражения /R при использовании "строкового аргумента" или /G:file .

Поиск пробелов

Если искомая строка содержит несколько слов, разделенных пробелами, функция FINDSTR вернет строки, содержащие одно из этих слов (ИЛИ).
Буквальный поиск ( /C:"string" ) изменит это поведение и позволит искать фразу или предложение. Буквенный поиск также позволяет искать знаки пунктуации.

Некоторые примеры с использованием текстового файла Demo.txt, содержащего следующее:

Быстрая коричневая лиса
На самом деле ^brown^ fox

Буквальный поиск /L :

Сопоставьте первую строку с: FINDSTR /L /C:"quick brown" Demo.txt
Сопоставьте вторую строку с: FINDSTR /L /C:"^brown" Demo.txt

Поиск регулярных выражений /R :

Сопоставьте слово fox в конце любой строки с: FINDSTR /R /C:" fox$" Demo.txt
Сопоставьте слово The или the (без учета регистра) в начале любой строки с: FINDSTR /I /R /C:"^the" Demo.txt

Вывод FINDSTR

Формат сопоставления строк, выводимых из FINDSTR, следующий:

имя файла:номер_строки:смещение_строки: текст

fileName = Имя файла, содержащего совпадающую строку. Имя файла не печатается, если запрос явно относится к одному файлу или при поиске по конвейеру или перенаправленному вводу. При печати имя файла всегда будет включать любую предоставленную информацию о пути. Дополнительная информация о пути будет добавлена, если используется параметр /S. Печатный путь всегда относится к предоставленному пути или к текущему каталогу, если он не указан.

lineNumber = Номер строки совпадающей строки, представленный в виде десятичного значения с 1 представляет 1-ю строку ввода. Печатается, только если указана опция /N.

lineOffset = Десятичное байтовое смещение начала соответствующей строки, где 0 представляет 1-й символ 1-й строки. Печатается, только если указан параметр /O.

text = двоичное представление совпадающей строки, включая любые и/или .

Ничего не упущено из двоичного вывода, так что этот пример, который соответствует всем строкам, создаст точную двоичную копию исходного файла:

Использование файла сценария

Несколько критериев поиска можно указать с помощью файла сценария /G
Несколько имен файлов для поиска можно указать с помощью /F

При подготовке исходного файла или файла сценария помещайте каждое имя файла или критерий поиска в новую строку.
Если необходимо выполнить поиск по нескольким именам файлов, все они должны существовать, иначе FINDSTR завершится с ошибкой.

Например: чтобы использовать критерии поиска в Criteria.txt для поиска файлов, перечисленных в Files.txt:

FINDSTR /g:Criteria.txt /f:Files.txt

Конвейер и перенаправление

  • Поток данных из канала TYPE file.txt | FINDSTR "строка поиска"
  • Stdin через перенаправление FINDSTR "searchString"
  • Если входные данные передаются по конвейеру, а последний символ потока не равен , то FINDSTR автоматически добавляется к входным данным. (XP, Vista и Windows 7.)
  • Если ввод перенаправлен и последний символ файла не равен , то FINDSTR автоматически добавит ввод.(только для Vista). Обратите внимание, что в этом случае XP и Windows 7/2008 не будут изменять перенаправленный ввод, что может привести к зависанию FINDSTR на неопределенный срок.

Поиск текста Unicode в PowerShell

При запуске FINDSTR в оболочке CMD ее можно использовать для сопоставления строк Unicode, но запуск аналогичной команды в PowerShell завершится ошибкой.

Это связано с тем, что выходные данные передаются из командлета PowerShell. в собственное приложение по умолчанию будет использоваться ASCII. Обычно это разумное значение по умолчанию, поскольку большинство собственных команд неправильно обрабатывают Unicode.

Кодировка вывода командлетов PowerShell управляется переменной $OutputEncoding, если она установлена, то FINDSTR будет работать с текстом Unicode.< /p>

$OutputEncoding = UnicodeEncoding
или для соответствия кодировке консоли:
$OutputEncoding = [Console]::OutputEncoding

Уровень ошибки

FINDSTR установит %ERRORLEVEL% следующим образом:

0 Совпадение найдено по крайней мере в одной строке хотя бы в одном файле.
1 Если совпадение не найдено ни в одной строке любого файла (или если файл вообще не найден).
2 Неверный синтаксис
Неверный переключатель будет печатать только сообщение об ошибке в потоке ошибок.

Echo 12G6 |FindStr /R "2"
If %ERRORLEVEL% EQU 0 echo Строка содержит один или несколько цифровых символов

Echo 12G6 |FindStr /R "[^0-9]"
If %ERRORLEVEL% EQU 0 echo Строка содержит один или несколько нечисловых символов

  • В поиске используется несколько буквальных строк поиска
  • Строки поиска имеют разную длину.
  • Короткая строка поиска частично совпадает с более длинной строкой поиска.
  • Поиск чувствителен к регистру (без параметра /I)

Найдите «бабушка» ИЛИ «Смит» в файлах Apples.txt или Pears.txt

FINDSTR "бабушка Смит" Apples.txt Pears.txt

Выполните поиск по запросу "бабушка Смит" в файле Contacts.txt (фактически то же самое, что и команда НАЙТИ)

FINDSTR /C:"бабушка Смит" Contacts.txt

Поиск слова "Smith" в каждом файле в текущей папке и во всех вложенных папках независимо от верхнего или нижнего регистра. Обратите внимание, что /S будет искать только ниже текущего каталога:

FINDSTR /s /i кузнец *.*

Точно совпадите с числом 12345:

Эхо 12345| findstr /X "12345"

Объедините два файла, верните только те строки, которые у них общие:

FINDSTR /g:"file1.txt" "file2.txt"

Поиск строки "fiona" во всех текстовых файлах в текущей папке, отображение имен файлов белым цветом на зеленом фоне ( :2F ).

FINDSTR /A:2F /C:"Фиона" *.txt

Прочитайте файл Z:\source.txt, удалите все пустые строки и запишите в Z:\result.txt

FINDSTR /v "^$" Z:\source.txt >Z:\result.txt

Найти каждую строку в романе.txt, содержащую слово SMITH, которому предшествует любое количество пробелов, и поставить перед каждой найденной строкой последовательный номер:

FINDSTR /b /n /c:" * кузнец" роман.txt

Поиск строки только в том случае, если она окружена стандартными разделителями
Найти слово "компьютер", но не слова "суперкомпьютер" или "компьютеризировать":

FINDSTR "\ " C: \work\inventory.txt

Найдите все слова, начинающиеся с букв "comp", например "computerise" или "compete"

Найдите любые положительные целые числа в файле sales.txt и включите все строки, которые равны нулю (0):

FINDSTR /r "^33*$ ^0$" Sales.txt

"Через двадцать лет вы будете больше разочарованы тем, чего не сделали, чем тем, что сделали. Так что бросьте булинь, отплывите от безопасной гавани. Поймай быка за гора. Проводить исследования. Мечтать. Откройте для себя» ~ Марк Твен

Связанные команды:

FINDSTR – Ограничения экранирования и длины.
FINDSTR – Поиск по разрывам строк.
FIND – Поиск текстовой строки в файле.
VBScript: поиск и замена
Эквивалент PowerShell: регулярные выражения / Select-String -raw / Where-Object.
Эквивалентная команда bash (Linux): grep — поиск в файлах строк, соответствующих заданному шаблону.

Все параметры командной строки findstr должны предшествовать строкам и имени файла в командной строке.

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

Литеральный символ — это символ, который не имеет специального значения в синтаксисе регулярных выражений; вместо этого он соответствует вхождению этого символа. Например, буквы и цифры являются литеральными символами.

Метасимвол – это символ со специальным значением (оператор или разделитель) в синтаксисе регулярных выражений.

< td>Подстановочный знак — любой символ < tr>
Метасимвол Значение
.
* Повторить — ноль или более вхождений предыдущего символа или класса.
^ Позиция начала строки — начало строки.
$ Конечная позиция строки — Конец строки.
[класс] Класс символов — любой символ из набора.
[^class] Обратный класс — любой символ, не входящий в набор .
[xy] Диапазон — любые символы в указанном диапазоне.
\x Escape — буквальное использование метасимвола.
\ Позиция начала слова — начало слова.
string\> Конечная позиция слова — конец слова.

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

Используйте следующее выражение как часть более крупного выражения для сопоставления любой строки, начинающейся с b и заканчивающейся на ing: b.*ing

Для поиска нескольких строк в наборе файлов необходимо создать текстовый файл, содержащий каждый критерий поиска в отдельной строке.

Используйте пробелы для разделения нескольких строк поиска, если аргумент не имеет префикса /c.

Примеры

Чтобы найти привет или здесь в файле x.y, введите:

Чтобы найти здравствуйте в файле x.y, введите:

Чтобы найти все вхождения слова Windows (с заглавной буквы W) в файле proposal.txt, введите:

Чтобы найти все файлы в текущем каталоге и во всех подкаталогах, содержащих слово Windows, независимо от регистра букв, введите:

Чтобы найти все вхождения строк, начинающихся с FOR и которым предшествует ноль или более пробелов (как в цикле компьютерной программы), и чтобы отобразить номер строки, в которой найдено каждое вхождение, введите :

Чтобы перечислить точные файлы, которые вы хотите найти в текстовом файле, используйте критерии поиска в файле stringlist.txt для поиска файлов, перечисленных в filelist.txt, а затем, чтобы сохранить результаты в файле results.out, введите:

Чтобы вывести список всех файлов, содержащих слово computer, в текущем каталоге и во всех подкаталогах, независимо от регистра, введите:

Чтобы вывести список всех файлов, содержащих слово "компьютер" и любые другие слова, начинающиеся с "комп" (например, "комплементировать" и "конкурировать"), введите:

< бр />

Джастин Гаррисон


Джастин Гаррисон
Писатель

Джастин Гаррисон (Justin Garrison) — энтузиаст Linux и инженер по облачной инфраструктуре в одной из крупнейших мировых компаний. Он также является соавтором книги Cloud Native Infrastructure компании O'Reilly. Подробнее.


Многие из нас используют Windows Search для поиска файлов и запуска программ, но поиск текста в файлах по умолчанию ограничен определенными типами файлов. Вот как вы можете расширить поиск, включив в него другие текстовые файлы.

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

Этот метод работает в Windows 10, 8, 7 и даже Vista. Экраны могут немного отличаться, но основной процесс одинаков во всех версиях.

Нажмите "Пуск", введите "index", а затем нажмите на результат "Параметры индексирования".


В окне "Параметры индексирования" нажмите кнопку "Дополнительно".


В окне «Дополнительные параметры» перейдите на вкладку «Типы файлов». Выберите расширение для типа файла, который вы хотите включить в поиск содержимого, а затем выберите параметр «Индексировать свойства и содержимое файла» в списке. Текст в столбце «Описание фильтра» должен измениться, чтобы отразить фильтр, используемый для открытия этого типа файла по умолчанию. В нашем примере мы выбираем расширение BAT, поэтому тип фильтра меняется на «Фильтр простого текста».


Если вы не найдете нужный тип файла в списке, это означает, что ни одно приложение не установлено в качестве обработчика по умолчанию для этого типа файлов. Чтобы добавить тип файла, введите расширение в поле «Добавить новое расширение в список», а затем нажмите кнопку «Добавить». По умолчанию Windows Search будет использовать простой текстовый фильтр для поиска содержимого этих типов файлов, поскольку другое приложение не связано.


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


Если вы хотите всегда искать в содержимом файла определенную папку, перейдите к этой папке в проводнике и откройте «Папка и параметры поиска».


На вкладке "Поиск" выберите параметр "Всегда искать имена и содержимое файлов".


После перестройки индекса поиск в этой папке будет автоматически включать содержимое файлов.

  • › Как искать текст в Word
  • › Почему Блокнот по-прежнему отлично подходит для создания заметок?
  • › 5 лучших бесплатных облачных хранилищ
  • › Как установить Google Play Маркет в Windows 11
  • › Почему прозрачные чехлы для телефонов желтеют?
  • › Как восстановить метки панели задач в Windows 11
  • › Почему не было Windows 9?
  • ›5 шрифтов, которые следует прекратить использовать (и лучшие альтернативы)

findstr — это встроенный инструмент операционной системы Windows, который можно запускать из командной строки для поиска текста в файлах или выводах командной строки. Другими словами, если вы хотите найти определенные текстовые строки с точным соответствием в файлах, в выводе командной строки или где-либо еще, вы можете использовать для этого бесплатную команду findstr в Windows. Он доступен во всех основных версиях Windows, включая Windows 10.

Вы можете использовать приложение для фильтрации выходных данных командной строки и поиска файлов с соответствующим текстом в отдельных файлах или целых структурах каталогов.

Запустить findstr /? из командной строки, чтобы отобразить все параметры и опции, которые поддерживает «Найти строку».
Сторонние инструменты, такие как Notepad++, GGRep и Everything, также поддерживают поиск текста в файлах.

Что такое findstr — поиск текста в файлах Windows

findstr

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

Вы можете запустить findstr из командной строки или в виде пакетного файла. Откройте новое приглашение командной строки, нажав клавишу Windows, набрав cmd.exe и выбрав результат. Или используйте команду «Выполнить», чтобы открыть findstr.

Некоторые полезные параметры в findstr

При изучении findstr следующие параметры помогут вам найти определенные тексты. Например, вы можете искать точное совпадение или слова с учетом регистра внутри файлов.

  • /? -- показать текст справки
  • /S -- поиск в каталоге и во всех подкаталогах
  • /I -- поиск не учитывает регистр
  • /R -- использовать строки поиска как регулярные выражения
  • /B -- соответствует шаблонам в начале строк.
  • /P -- пропускать файлы с непечатаемыми символами
  • /V -- вывести только те строки, которые содержат совпадение
  • /N -- вывести номер строки

findstr Примеры, которые могут оказаться полезными

Рассмотрите эти примеры, чтобы попробовать findstr:

  • ipconfig | findstr «192.168» — команда запускает ipconfig и возвращает любой результат, соответствующий 192.168.1.1. Любой другой результат игнорируется.
  • нетстат | findstr "123.123.123.13" — запускает команду netstat и возвращает любой результат, соответствующий строке (в данном случае IP-адресу).
  • findstr /c:"windows 10" windows.txt -- ищет в документе windows.txt строку "windows 10"
  • findstr "windows 10" windows txt – поиск слов "windows" или "10" в файле.
  • findstr "windows" c:\documents\*.* -- ищет в любом файле в каталоге c:\documents строку "windows".
  • findstr /s /i Windows *.* -- Поиск слова Windows во всех файлах в текущем каталоге и во всех подкаталогах без учета регистра.
  • findstr /b /n /r /c:"^ *FOR" *.bas-- Возвращает любую строку, начинающуюся с FOR, которой предшествует ноль или более пробелов. Также печатает номер строки.

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

Заключительные слова

Главное преимущество findstr заключается в том, что это встроенный инструмент, который можно запустить на любом компьютере с Windows. Это полезно для быстрого поиска текста в файлах, но он также работает как инструмент для фильтрации вывода инструментов командной строки. Это бесплатно, быстро и просто в использовании — что еще нужно от инструмента поиска?

Теперь вы: Какую программу вы используете для поиска текста в файлах?

Читайте также: