FINDSTR

Команда FINDSTR используется для поиска текстовой строки в одном или нескольких файлах с использованием регулярных выражений. По сравнению с командой FIND данная команда позволяет выполнять значительно более гибкий поиск в соответствии с правилами, задаваемыми в качестве параметров командной строки. Регулярные выражения ( regular expressions ) - это своеобразный язык с применением обычных и специальных символов, задающих шаблон и алгоритм поиска. Обычные символы ( литералы ) - это привычные текстовые знаки - буквы, цифры, знаки препинания и т. п. Специальные символы ( метасимволы ) - это элементы записи правил и параметров обработки для обычных символов. Так, например, символ точка . означает "Любой символ", квадратные скобки - набор из заключенных в них символов, последовательность \d - любой цифровой символ, \D - любой не цифровой символ.

При необходимости обработки метасимволов как обычных элементов текста, в регулярных выражениях используется экранирующий символ - обратная косая черта \ . Запись \[ означает обычный символ раскрывающейся квадратной скобки, а не метасимвол для начала набора. Для экранирования нескольких метасимволов используется последовательность :

\Q . . . набор метасимволов . . .\E

Обратная косая черта перед обычным символом означает, что он интерпретируется как служебный символ:

\s - соответствует символу пробела.

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

\S - любой символ, не пробел.

Формат командной строки FINDSTR:

FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/P] [/F:файл] [/C:строка] [/G:файл] [/D:список_папок] [/A:цвета] [/OFF[LINE]] строки [[диск:][путь]имя_файла[ ...]]

/B - Искать образец только в началах строк.
/E - Искать образец только в конце строк.
/L - Поиск строк дословно.
/R - Поиск строк как регулярных выражений.
/S - Поиск файлов в текущей папке и всех ее подпапках.
/I - Определяет, что поиск будет вестись без учета регистра.
/X - Печатает строки, которые совпадают точно.
/V - Печатает строки, не содержащие совпадений с искомыми.
/N - Печатает номер строки, в которой найдено совпадение, и ее содержимое.
/M - Печатает только имя файла, в которой найдено совпадение.
/O - Печатает найденный строки через пустую строку.
/P - Пропускает строки, содержащие непечатаемые символы.
/OFF[LINE] - Не пропускает файлы с установленным атрибутом "Автономный".
/A:цвета - Две шестнадцатеричные цифры - атрибуты цвета. См. "COLOR /?"
/F:файл - Читает список файлов из заданного файла (/ для консоли).
/C:строка - Использует заданную строку как искомую фразу поиска.
/G:файл - Получение строк из заданного файла (/ для консоли).
/D:список_папок - Поиск в списке папок (разделяются точкой с запятой).
строка - Искомый текст.
[диск:][путь]имя_файла - Задает имя файла или файлов.


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

FINDSTR "Привет мир" file.txt поиск "Привет" или "мир" в файле file.txt

FINDSTR /C:"Привет мир" file.txt поиск строки "Привет мир" в файле file.txt.

Краткую справку по использованию команды FINDSTR можно получить при использовании ключа /?:

FINDSTR /?

Кроме параметров командной строки, справка дополнена краткой сводкой по синтаксису регулярных выражений:

. - Любой символ.
* - Повтор: ноль или более вхождений предыдущего символа или класса
^ - Позиция в строке: начало строки
$ - Позиция в строке: конец строки
[класс] - Класс символов: любой единичный символ из множества
[^класс] - Обратный класс символов: любой единичный символ из дополнения
[x-y] - Диапазон: любые символы из указанного диапазона
\x - Служебный символ: символьное обозначение служебного символа x
\< xyz - Позиция в слове: в начале слова
xyz\ > - Позиция в слове: в конце слова


За полной информацией о регулярных выражениях FINDSTR обратитесь к доступной интерактивной документации.

Примеры использования FINDSTR:

findstr /M [0-9] %temp%\*.* - отобразить список файлов ( ключ /M ), в которых содержатся цифры ( набор 0-9 ) из каталога временных файлов ( определяется %TEMP% )

findstr /P /I "Error" %temp%\*.* - Отобразить строки, содержащие слово Error . Поиск строк выполнять без учета регистра символов ( ключ /I ), строки, содержащие непечатаемые символы, не отображать ( ключ /P ) .

findstr /M /I /C:"network error" %windir%\system32\*.exe - отобразить список исполняемых файлов из системного каталога Windows\system32, в которых встречается строка "network error "

findstr /s /I /A:f4 /O /C:"failed" C:\*.log - отобразить строки файлов с расширением log, содержащие слово failed. Имя файла и смещение строки относительно его начала отображать красными символами на белом фоне ( ключ /A:F4 ). Поиск выполняется во всех файлах .log корневого каталога диска C: и всех его подкаталогов ( ключ /S )

findstr /A:FC /N /s /i "\< comput.*" *.* - отобразить строки, содержащие слово, начинающееся с " comput" ( compute, computer, computers и т. д. ), а также имена файлов и номера строк ( ключ /N ).

findstr /A:FC /N /s /i "\< правильн.*" *.* - как и в предыдущем случае, но ищется строка, содержащая слово, начинающееся с подстроки правильн. При использовании символов русского языка нужно учитывать их кодировку, поскольку коды символов в DOS- и Windows - кодировке различаются. В командных файлах, когда необходимо выполнять поиск строк, содержащих символы национального алфавита, шаблон для поиска должен быть представлен в той же кодировке, что и содержимое файла. Можно использовать переключение кодовой страницы перед поиском:

REM переключаемся на Windows - кодировку
chcp 1251
REM Выполняем поиск
findstr /A:FC /N /s /i "\< правильн.*" *.*
REM Переключаемся на DOS - кодировку
chcp 866
REM Выполняем поиск
findstr /A:FC /N /s /i "\< правильн.*" *.*

Синтаксис

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.*" *.*

Категория: Команды | Добавил: masterov (12.11.2017) | Автор: Андрей Мастеров E W
Просмотров: 45 | Теги: команды Windows, Синтаксис | Рейтинг: 0.0/0
Другие материалы по теме:
Всего комментариев: 0
avatar