FINDSTR в командной строке

Я пытаюсь создать файл со всеми строками из входного файла, содержащего определенную строку, используя команду FINDSTR в cmd.exe. Моя команда ниже не дает никаких результатов, тогда как команда FIND (также ниже) показывает, что есть 182 688 строк, содержащих строку, которую я ищу...

Команда НАЙТИ:

FIND /c "searchstring" c:\Users\karl\Desktop\Report.csv

дает следующее:

---------- C:\USERS\KARL\DESKTOP\REPORT.CSV: 182688

Команда FINDSTR:

findstr /i /c:"searchstring" c:\Users\karl\Desktop\Report.csv > results.out

дает мне пустой файл с именем results.out.

Что мне не хватает?


person Karl Major    schedule 07.03.2013    source источник
comment
Что именно является вашим searchstring? Наиболее вероятным виновником, как я вижу сейчас, является то, что поведение вашей строки поиска отличается от того, что вы намеревались использовать в своей команде findstr; что то, что вы подразумеваете как буквальную строку, интерпретируется как нотация регулярного выражения с непреднамеренным особым значением.   -  person rojo    schedule 07.03.2013
comment
@rojo - я согласен, строка поиска, вероятно, не интерпретируется должным образом. Но это не может быть проблемой регулярного выражения, потому что опция /c по умолчанию использует буквальный поиск, если не добавлена ​​опция /r.   -  person dbenham    schedule 08.03.2013
comment
@dbenham - так, например, findstr /i /c:"*abcd*" будет искать литерал (звездочка) abcd (звездочка), а не строку, содержащую abcd? Это проясняет некоторую давнюю путаницу. До сих пор я просто избегал использования пробелов в своих выражениях, поэтому мне не приходилось использовать переключатель /c с findstr. Хм.   -  person rojo    schedule 08.03.2013


Ответы (2)


FINDSTR имеет много недокументированных «функций», которые могут вас сбить с толку. См. Каковы недокументированные функции и ограничения команды Windows FINDSTR?

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

  • Специальные правила для экранирования " и \ в буквальных строках поиска
  • Многие расширенные символы ASCII не находят себя при использовании в строках поиска командной строки.
  • FINDSTR не может искать файлы Unicode. Мне сказали, что FIND может искать файлы юникода.
person dbenham    schedule 07.03.2013
comment
Моя строка действительно содержала символы, которые не удалось найти. В итоге я использовал MS Access для выполнения необходимого запроса. Большое спасибо @dbenham - person Karl Major; 22.03.2013

Попробуй это. /n дает номер строки:

findstr /i /n "\<searchstring\>" c:\Users\karl\Desktop\Report.csv

person mmv_sat    schedule 14.01.2015