Hacer comparaciones lógicas O con Findstr.exe

10

Esta puede ser una pregunta estúpida, pero incluso después de leer la documentación todavía no estoy seguro de cómo encontrar todas las líneas en un archivo que contengan ".cpp" o ".h".

¿Hay una manera de hacerlo?

Por ejemplo (no funciona):

findstr /i .cpp,.h // , == OR
Thomas Bonini
fuente

Respuestas:

8

Dale una oportunidad a esto, debería funcionar para ti.

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

Envuelva ambos entre comillas y separe con un espacio. Tenga en cuenta que también debe escapar del. en los dos.

squillman
fuente
4

Si necesita incluir frases (palabras separadas por espacios), puede hacerlo:

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

O si obtiene algunas filas no deseadas, también puede excluirlas utilizando el /vparámetro:

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

(Probado esto en Windows 7 y Windows 10)

elysch
fuente
Tenga en cuenta que, para procesar eficientemente grandes conjuntos de datos, es preferible evitar el segundo comando FindStr cuando sea posible, o reducir las líneas que se le envían cuando no. Esto es posible cuando los términos que se excluyen se superponen de alguna manera con los términos que se incluirán mediante el uso de las comparaciones de expresiones regulares simplificadas que ofrece el comando FindStr. En el ejemplo dado, "Driver" coincidente pero excluyendo "DriverS" tiene el potencial de ser más rápido en grandes conjuntos de datos al reducir las líneas pasadas al segundo FindStr para evaluar. es decirFindStr /I /R /C:"Hosted" /C:"Version /C:"Driver[^S]" | FindStr /v /i /c:"Native"
Ben Personick
Además, si conoce bien su conjunto de datos en particular, es posible que ya sepa que la mayoría de los términos que desea excluir representan la mayoría de su conjunto de datos, entonces puede ser beneficioso colocar primero las declaraciones de exclusión, es decirFindStr /V /I /C:"Native" /C:"Drivers" | FindStr /I /R /C:"Hosted" /C:"Version /C:"Driver"
Ben Personick,
0

La forma en que forme la ORlógica depende de lo que esté buscando y de sus cambios futuros anticipados, si corresponde.

Si se trata de una lista de consultas que no tienen espacios en blanco, puede hacerlo así, rápido y sucio:

findstr "thing1 thing2 thing3 thing4 thing5" y si alguna de esas cosas está presente, se evaluará como verdadero y saldrá de 0.

Si lo que está buscando tiene espacios en blanco, debe usar findstrlas cadenas de búsqueda literales con el /c:""tipo de parámetro. Todavía puede usar este tipo de parámetro si no hay espacios en blanco.

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

Sin embargo , no puede combinar literal con rápido y sucio . Por ejemplo, esto no funcionará:

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

Necesitaría convertir los parámetros anteriores a parámetros literales, así:

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

Debido a esto, es una mejor práctica usar la opción literal porque se escalará mejor con scripts dinámicos. Sin embargo, si es solo un conjunto estático de consultas que no tienen espacios en blanco, la forma rápida y sucia debería ser suficiente.

kayleeFrye_onDeck
fuente