Если вы используете пробелы, вам нужна опция /C:
, чтобы передать литеральную строку (и) опции регулярного выражения /R
.
Как только она попадает в регулярное выражение, она обрабатывается как регулярное выражение.
Тем не менее, это типичный мусор MS.
Используйте две строки поиска регулярных выражений
Суть в том, что вам нужно использовать 2 строки для обработки случаев, когда
Load frm
находится в начале примерно так:
Load frm apples bananas carrots
ИЛИ в середине примерно так:
some other text Load frm and more
.
Версия без классов символов
Ниже используется XP sp3, окна 7 могут отличаться, оба являются мусором!
findstr /N /R /C:" *Load *frm" /C:"^Load *frm" test.txt
7:Load frm is ok
8: Load frm is ok
Mind the Colon
ПРИМЕЧАНИЕ: Двоеточие в /C:
ОБЯЗАТЕЛЬНО для этого работает.
Если вы пропустите двоеточие, то findstr
'Обработка ошибок заключается в том, чтобы рассматривать /C
как недопустимую опцию, игнорировать эту недопустимую опцию и продолжать в любом случае.Приводит к неожиданному и нежелательному выводу.
Эквивалентная версия с использованием классов символов
findstr /N /R /C:"[ ][ ]*Load[ ][ ]*frm" /C:"^Load[ ][ ]*frm" test.txt
Разбивка классов символов
// The first regex search string breaks down like this:
[ ] // require 1 space
[ ]* // optional many spaces
Load // literal 'Load'
[ ] // require 1 space
[ ]* // optional many spaces
frm // literal 'frm'
// The second regex search string breaks down like this:
^ // beginning of line
Load // literal 'Load'
[ ] // require 1 space
[ ]* // optional many spaces
frm // literal 'frm'
Реальное регулярное выражение может быть\bLoad\s+frm