findstr не находит СЕЙЧАС

У меня не так много опыта работы с findstr, но мне это совсем не понятно. Или это ошибка findstr?

посмотрите на эти примеры:

1) echo NOW|findstr "CLEAN NOCHANGE NOW">NUL&&echo found ничего не возвращает Но почему??

2) echo CLEAN|findstr "CLEAN NOCHANGE NOW">NUL&&echo found возврат найден здесь все в порядке

3) echo NOCHANGE|findstr "CLEAN NOCHANGE NOW">NUL&&echo found return обнаружил, что это тоже работает

Но когда я использую /I, это работает
4) echo NOW|findstr /I "CLEAN NOCHANGE NOW">NUL&&echo found -> возврат найден, все в порядке

если "сейчас" в нижнем регистре -> это работает
5) echo now|findstr "CLEAN NOCHANGE now">NUL&&echo найдено -> вернуть найдено

Есть ли что-то особенное со строкой «СЕЙЧАС»?


person laza    schedule 12.05.2017    source источник
comment
В NOW нет ничего особенного, но есть много особенного в findstr (это инструмент Microsoft)   -  person jeb    schedule 12.05.2017


Ответы (1)


Согласно потоку Почему этот пример FINDSTR с несколько литеральных строк поиска находят соответствие?, findstr ведет себя некорректно при наличии нескольких литеральных строк поиска с учетом регистра, которые имеют разную длину и частично перекрываются. См. также этот пост: Каковы недокументированные функции и ограничения Windows Команда FINDSTR?.

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

echo NOW| findstr /R "CLEAN NOCHANGE NOW" > nul && echo found

Вот обходной путь с использованием отдельных команд findstr для каждой отдельной строки буквального поиска:

echo NOW| (findstr /V "CLEAN" | findstr /V "NOCHANGE" | findstr /V "NOW") > nul || echo found

Вот еще один обходной путь, основанный на младшем брате findstr, а именно на команде find:

echo NOW| (find /V "CLEAN" | find /V "NOCHANGE" | find /V "NOW") > nul || echo found
person aschipfl    schedule 12.05.2017