Выполнение логического ИЛИ сравнения с помощью findstr.exe

11

Это может быть глупым вопросом, но даже после прочтения документации я все еще не уверен, как найти все строки в файле, который содержит «.cpp» или «.h».

Есть ли способ сделать это?

Например (не работает):

findstr /i .cpp,.h // , == OR
Томас Бонини
источник

Ответы:

9

Дайте этому шанс, должно работать на вас.

findstr /i "\.cpp \.h" myfile.txt

Оберните как в кавычки, так и через пробел. Обратите внимание, вы также должны избежать. в них обоих.

squillman
источник
4

Если вам нужно включить фразы (разделенные пробелами слова), вы можете сделать это:

findstr /i /c:"IBSS" /c:"WDI Version" /c:"Soft Ap"

Или, если вы получаете некоторые нежелательные строки, вы также можете исключить их, используя /vпараметр:

findstr /i /c:Hosted /c:Version /c:Driver | findstr /v /i /c:drivers /c:native

(Проверено это на Windows 7 и Windows 10)

elysch
источник
Примечание. Для эффективной обработки больших наборов данных предпочтительно избегать второй команды FindStr, когда это возможно, или уменьшать количество строк, передаваемых на нее, когда это невозможно. Это возможно в тех случаях, когда исключаемые термины каким-то образом перекрываются с включаемыми терминами, используя упрощенные сравнения регулярных выражений, предлагаемые командой FindStr. В приведенном примере сопоставление «Driver», но исключая «DriverS», может быть быстрее на больших наборах данных за счет сокращения строк, передаваемых во второй FindStr для оценки. то естьFindStr /I /R /C:"Hosted" /C:"Version /C:"Driver[^S]" | FindStr /v /i /c:"Native"
Бен
Кроме того, если вы знаете свой конкретный набор данных достаточно хорошо, вы, возможно, уже знаете, что большинство терминов, которые вы хотите исключить, составляют большую часть вашего набора данных, тогда может быть полезно сначала поместить операторы исключения, т. FindStr /V /I /C:"Native" /C:"Drivers" | FindStr /I /R /C:"Hosted" /C:"Version /C:"Driver"
Ben Personick
0

То, как вы формируете ORлогику, зависит от того, что вы ищете, и от ваших ожидаемых будущих изменений, если это применимо.

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

findstr "thing1 thing2 thing3 thing4 thing5" и если какая-либо из этих вещей присутствует, она оценивается как true и завершается 0.

Если то, что вы ищете, имеет пробел, вы должны использовать findstrбуквенные строки поиска с /c:""типом параметра. Вы все еще можете использовать этот тип параметра, если пробелов нет.

/C:string Uses specified string as a literal search string.

Тем не менее , вы не можете комбинировать буквальным с Быстрым и грязным . Например, это не будет работать:

findstr "thing1 thing2" /c:"thing3 thingy"

Вам нужно будет преобразовать более ранние параметры в буквальные параметры, например, так:

findstr /c:"thing1" /c:"thing2" /c:"thing3 thingy"

Из-за этого лучше использовать буквенную опцию, потому что она будет лучше масштабироваться динамическими сценариями. Однако, если это просто статический набор запросов без пробелов, быстрого и грязного способа должно быть достаточно.

kayleeFrye_onDeck
источник