Faire des comparaisons logiques OU avec findstr.exe

10

Cela peut être une question stupide, mais même après avoir lu la documentation, je ne sais toujours pas comment trouver toutes les lignes d'un fichier contenant ".cpp" ou ".h".

Y-a-t-il un moyen de faire ça?

Par exemple (ne fonctionne pas):

findstr /i .cpp,.h // , == OR
Thomas Bonini
la source

Réponses:

8

Donnez-lui un coup de feu, devrait fonctionner pour vous.

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

Enveloppez les deux entre guillemets et séparez-les par un espace. Remarque, vous devez également échapper à la. dans les deux.

squillman
la source
4

Si vous devez inclure des phrases (mots séparés par des espaces), vous pouvez le faire:

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

Ou si vous obtenez des lignes indésirables, vous pouvez également les exclure en utilisant le /vparamètre:

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

(Testé sur Windows 7 et Windows 10)

elysch
la source
Remarque: Pour traiter efficacement les grands ensembles de données, il est préférable d'éviter la deuxième commande FindStr lorsque cela est possible ou de réduire les lignes qui lui sont envoyées dans le cas contraire. Cela est possible lorsque les termes à exclure se chevauchent d'une certaine manière avec les termes à inclure en utilisant les comparaisons Regex simplifiées offertes par la commande FindStr. Dans l'exemple donné, la mise en correspondance de "Driver" mais en excluant "DriverS" a le potentiel d'être plus rapide sur de grands ensembles de données en réduisant les lignes passées au deuxième FindStr à évaluer. ieFindStr /I /R /C:"Hosted" /C:"Version /C:"Driver[^S]" | FindStr /v /i /c:"Native"
Ben Personick
De plus, si vous connaissez assez bien votre ensemble de données particulier, vous savez peut-être déjà que la plupart des termes que vous souhaitez exclure représentent la majorité de votre ensemble de données, alors il peut être avantageux de placer les déclarations d'exclusion en premier, c'estFindStr /V /I /C:"Native" /C:"Drivers" | FindStr /I /R /C:"Hosted" /C:"Version /C:"Driver"
Ben Personick
0

La façon dont vous formez la ORlogique dépend de ce que vous recherchez et de vos changements futurs prévus, le cas échéant.

S'il s'agit d'une liste de requêtes qui ne contiennent aucun espace, vous pouvez simplement le faire comme ceci, rapide et sale:

findstr "thing1 thing2 thing3 thing4 thing5" et si l'une de ces choses est présente, elle sera évaluée à true et quittera 0.

Si ce que vous recherchez contient des espaces, vous devez utiliser findstrles chaînes de recherche littérale avec le /c:""type de paramètre. Vous pouvez toujours utiliser ce type de paramètre s'il n'y a pas d'espace.

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

Cependant , vous ne pouvez pas combiner littéral avec rapide et sale . Par exemple, cela ne fonctionnera pas:

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

Vous devez convertir les paramètres précédents en paramètres littéraux, comme ceci:

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

Pour cette raison, il est préférable d'utiliser l'option littérale car elle évoluera mieux avec les scripts dynamiques. Cependant, s'il ne s'agit que d'un ensemble statique de requêtes sans espace, la méthode rapide et sale devrait suffire.

kayleeFrye_onDeck
la source