Logische ODER-Vergleiche mit findstr.exe durchführen

10

Dies mag eine dumme Frage sein, aber selbst nach dem Lesen der Dokumentation bin ich mir nicht sicher, wie ich alle Zeilen in einer Datei finden kann, die entweder ".cpp" oder ".h" enthalten.

Gibt es eine Möglichkeit, das zu tun?

Zum Beispiel (funktioniert nicht):

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

Antworten:

8

Probieren Sie es aus, sollte für Sie arbeiten.

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

Wickeln Sie beide in Anführungszeichen und trennen Sie sie mit einem Leerzeichen. Beachten Sie, dass Sie auch dem entkommen müssen. in beiden.

Squillman
quelle
4

Wenn Sie Phrasen (durch Leerzeichen getrennte Wörter) einfügen müssen, können Sie dies tun:

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

Wenn Sie unerwünschte Zeilen erhalten, können Sie diese auch über den /vParameter ausschließen:

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

(Getestet unter Windows 7 und Windows 10)

elysch
quelle
Hinweis: Für die effiziente Verarbeitung großer Datenmengen ist es vorzuziehen, den zweiten FindStr-Befehl nach Möglichkeit zu vermeiden oder die ihm zugeführten Zeilen zu reduzieren, wenn dies nicht der Fall ist. Dies ist möglich, wenn sich auszuschließende Begriffe in irgendeiner Weise mit den einzuschließenden Begriffen überschneiden, indem die vereinfachten Regex-Vergleiche verwendet werden, die vom Befehl FindStr angeboten werden. In dem angegebenen Beispiel kann "Driver", jedoch ohne "DriverS", bei großen Datenmengen schneller sein, indem die an den zweiten FindStr zur Auswertung übergebenen Zeilen reduziert werden. dhFindStr /I /R /C:"Hosted" /C:"Version /C:"Driver[^S]" | FindStr /v /i /c:"Native"
Ben Personick
Wenn Sie Ihren bestimmten Datensatz gut genug kennen, wissen Sie möglicherweise bereits, dass die meisten Begriffe, die Sie ausschließen möchten, den größten Teil Ihres Datensatzes ausmachen. Dann kann es vorteilhaft sein, die Ausschlusserklärungen zuerst zu platzieren, z. B.FindStr /V /I /C:"Native" /C:"Drivers" | FindStr /I /R /C:"Hosted" /C:"Version /C:"Driver"
Ben Personick,
0

Wie Sie die ORLogik bilden, hängt davon ab, wonach Sie suchen und gegebenenfalls von Ihren voraussichtlichen zukünftigen Änderungen.

Wenn es sich um eine Liste von Abfragen handelt, die kein Leerzeichen enthalten, können Sie dies einfach so tun: schnell und schmutzig:

findstr "thing1 thing2 thing3 thing4 thing5" und wenn eines dieser Dinge vorhanden ist, wird es als wahr ausgewertet und 0 beendet.

Wenn das, was Sie suchen, Leerzeichen enthält, müssen Sie die findstrLiteral-Suchzeichenfolgen mit dem /c:""Parametertyp verwenden. Sie können diesen Parametertyp weiterhin verwenden, wenn kein Leerzeichen vorhanden ist.

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

Allerdings , können Sie nicht wörtlich kombinieren mit quick & dirty . Dies funktioniert beispielsweise nicht:

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

Sie müssten die früheren Parameter wie folgt in Literalparameter konvertieren:

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

Aus diesem Grund ist es besser, die Literaloption zu verwenden, da sie mit dynamischen Skripten besser skaliert werden kann. Wenn es sich jedoch nur um eine statische Gruppe von Abfragen handelt, die kein Leerzeichen enthalten, sollte der schnelle und schmutzige Weg ausreichen.

kayleeFrye_onDeck
quelle