Findstr
Поиск образцов текста в файлах с использованием регулярных выражений.
Синтаксис
findstr [/b] [/e] [/l] [ /r] [/s] [/i] [/x] [/v] [ /n] [/m] [/o] [/p] [/offline] [ /g:файл] [/f:файл] [/c:строка] [ /d:СписокКаталогов] [/a:АтрибутЦвета] [строки] [[ диск:][путь] ИмяФайла [...]]
Параметры
- /b
- Сравнивает шаблон с началом строки.
- /e
- Сравнивает шаблон с концом строки.
- /l
- Использует заданную строку буквально.
- /r
- Использует строку поиска как регулярное выражение. Команда Findstr интерпретирует все метасимволы как регулярные выражения, если не используется ключ /l.
- /s
- Задает поиск файлов в текущем каталоге и его подкаталогах.
- /i
- Задает поиск без различия строчных и заглавных букв.
- /x
- Печатает точно совпавшие строки.
- /v
- Печатает строки, не содержащие совпадений.
- /n
- Печатает в начале совпавшей строки ее номер.
- /m
- Печатает только имя файла при обнаружении совпадения.
- /o
- Печатает смещение перед выводом строки с совпадением.
- /p
- Пропускает файлы с непечатаемыми символами.
- /offline
- Обработка файлов с автономным атрибутом.
- /f:файл
- Читает список из заданного файла.
- /c:строка
- Использует заданный текст как литеральную строку поиска.
- /g:файл
- Получает строки поиска из заданного файла.
- /d:СписокКаталогов
- Ищет в списке каталогов, разделенном запятыми.
- /a:АтрибутЦвета
- Задает атрибуты цвета двумя шестнадцатеричными цифрами.
- строки
- Текст, поиск которого производится в файле, заданном параметром ИмяФайла.
- [диск:][путь] ИмяФайла [...]
- Файл или несколько файлов для поиска.
- /?
- Отображение справки в командной строке.
Заметки
- Использование регулярных выражений с командой findstr
Команда findstr способна выполнять точный поиск текста в любом текстовом файле или файлах формата ASCII. Однако иногда имеется только часть информации, которая должна быть найдена, или требуется найти информацию в широком диапазоне. В таких случаях команда findstr предоставляет мощную возможность поиска с использованием регулярных выражений.
В противоположность точному заданию строки символов для поиска, регулярные выражения позволяют задать образец текста. Для задания образца используются литералы и метасимволы. Каждый символ, который не имеет специального значения в регулярных выражениях, рассматривается как литерал и должен точно совпасть при поиске. Например, буквы и цифры являются литеральными символами. Метасимволы это символы со специальным значением (оператор или разделитель) в регулярных выражениях.
В приведенной ниже таблице перечислены метасимволы, допустимые для команды findstr.
Символ Значение . Подстановочный знак: любой символ * Повтор: ноль или более предшествующих символов или классов символов. ^ Позиция строки: начало строки $ Позиция строки: конец строки [класс] Класс символа: любой символ из множества [^класс] Инвертированный класс: любой символ из множества [x-y] Диапазон: любой символ из диапазона \x Исключение: использование метасимвола x в качестве литерала \<xyz Позиция слова: начало слова xyz\> Позиция слова: конец слова Специальные символы в регулярных выражениях дают наилучший результат при совместном использовании. Например, при комбинации символа подстановки (.) и повторителя (*) совпадает любая строка символов:
.*
Используйте следующее выражение как часть более объемного выражения, которое совпадает со строкой, начинающейся с "b" и оканчивающейся на "ing":
b.*ing
Примеры
Для отделения строк поиска друг от друга следует использовать пробелы, кроме тех случаев, когда задан ключ /c. Для поиска слова "hello" или "there" в файле x.y введите следующую каманду:
findstr "hello there" x.y
Для поиска словосочетания "hello there" в файле x.y введите следующую каманду:
findstr /c:"hello there" x.y
Для поиска всех слов "Windows" (с первой заглавной буквой W) в файле Proposal.txt может быть использована следующая команда:
findstr Windows proposal.txt
Для поиска в каждом файле текущего каталога и в файлах всех подкаталогов слова "Windows" без учета строчных и заглавных букв может быть использована следующая команда:
findstr /s /i Windows *.*
Для поиска всех строк, содержащих слово "FOR", перед которым идет несколько пробелов (чтобы найти в программе оператор цикла), с выводом номера каждой строки можно использовать команду:
findstr /b /n /c:" *FOR" *.bas
Если требуется найти несколько разных наборов символов в нескольких файлах, можно создать текстовый файл, каждая строка которого содержит образец для поиска. Также можно задать точный список файлов, если поиск будет производиться в текстовых файлах. Для использования файла Finddata.txt, содержащего образцы для поиска, файла Filelist.txt, содержащего список файлов, в которых будет производиться поиск, и записи результатов работы программы в файл Results.out служит следующая команда:
findstr /g:finddata.txt /f:filelist.txt > results.out
Предположим, необходимо найти каждый файл в текущем каталоге и его подкаталогах, содержащий слово "computer" без различия строчных и заглавных букв. Для вывода списка таких файлов можно использовать следующую команду:
findstr /s /i /m "\<computer\>" *.*
Теперь, предположим, требуется найти не только само слово "computer", но и все другие слова, начинающиеся с тех же букв, таких как "compliment" и "compete". Введите следующую команду:
findstr /s /i /m "\<comp.*" *.*
Для вопросов, обсуждений, замечаний, предложений и т. п. можете использовать раздел форума этого сайта (требуется регистрация).
Новый раздел о средствах командной строки в рамках этого же проекта расположен здесь