findstr – grep für Windows
Findstr ist grep für Windows. Steigt man von Linux auf Windows um, dann vermisst man gerne mal die kleinen nützlichen Kommandozeilen Tools. Grep ist eines davon. Ich verwende es unter Linux eigentlich dauernd. Auf Windows gibt es leider kein vergleichbares Tool, findstr deckt noch am besten die Anforderungen an eine effektive Suche ab.
findstr – grep für Windows
Das Problem kennt jeder, man sucht einen Text oder bestimmte Wörter die man irgendwann in einer Datei abgespeichert hat. Doch nur wo? Als Programmierer kommt man immer wieder in eine ähnliche Situation und muss Dateien die vom Programm geladen werden (beispielsweise *.xml Dateien) nach bestimmten Wörtern durchsuchen. Die perfekte Konstellation für grep. Unter Windows muss es doch auch ein vergleichbares Tool geben. Nach einiger Recherche bin ich auf findstr gestoßen.
Verwendung
Das findstr Kommando hat zwei Anwendungsbereiche:
- Text in Dateien suchen
- Text in der Ausgabe anderer Kommandos suchen
in beiden Fällen liefert findstr die Ausgabe direkt in die Konsole. Es macht Sinn die Ausgabe gerade bei längerer Suche oder bei Tasks bei denen mit sehr vielen Zeilen von Ergebnissen zu rechnen ist in eine Datei umzuleiten. Ein einfaches Beispiel einer Suche:
In der einfachsten Version ohne zusätzlicher Parameter wird die Zeichenfolge „test“ in allen *.txt Dateien im aktuellen Verzeichnis gefunden. Die doppelte Ausgabe der Datei lässt vermuten, dass der gesuchte String in dieser einen Datei zwei Mal gefunden wurde. Zum Glück kann das Tool aber wesentlich mehr als das.
findstr /?
listet die Hilfe vom Tool:
Besonders interessant ist /S um rekursiv den Verzeichnisbaum zu durchsuchen und /R für die Interpretation des gesuchten Strings als regulärer Ausdruck (ist nicht das selbe wie Regex unter Linux!). In jedem Fall wird die Suche dadurch effektiver.
DOS
findstr ist der Nachfolger von find. Dieses Suchprogramm war unter DOS der Standard, ist aber von seinen Möglichkeiten stark eingeschränkt. Da es nur wenige Einstellungen bietet und keine Regular Expressions versteht ist es für heutige Suchanfragen über eine sehr große Menge an Dateien unbrauchbar.
Alternativen
Windows bietet keine sinnvollen Alternativen an. Braucht es auch nicht, denn man kann recht einfach die Linux Kommandos nutzen. Das geht mit cygwin oder unter Windows 10 mit einem Linux als Subsystem. Damit kann man nativ grep oder ähnlich nützliche Tools wie head, Tail, diff, wc, sort usw. nutzen.
Fazit
Tatsächlich ist findstr nicht grep für Windows. Dafür ist das Linux Tool einfach zu komplex. Bei der Verwendung von findstr musste ich feststellen, dass die Suche wesentlich langsamer ist als mit grep auf Linux (zumindest gefühlt). Am Firmen Laptop hatte ich bei zahlreichen Dateien eine „kann nicht geöffnet werden“ Meldung. Diese haben die Konsole mit Ausgaben zugemüllt. Ein Suchprogramm sollte nur Ergebnisse anzeigen oder zumindest eine Option anbieten diese Fehlerausgaben zu unterdrücken. findstr ist das Programm, dass noch am ehesten die Anforderungen des mächtigen grep Tools abdeckt, wird diesem aber nicht gerecht. Microsoft hat glücklicherweise einen Schritt auf Linux zu gemacht und dieses als Subsystem eingebunden. Deshalb nutzt der findige Nutzer einfach das bessere Programm.
Hier muss ich leider widersprechen … die Windows-Alternative zu grep ist nicht das dürftige findstr, sondern das PowerShell-Cmdlet „Select-String“.
Das ist ein mächtiges Tool für die Suche mittels CLI, ähnlich grep. RegEx geht damit übrigens auch (Parameter -pattern).
Select-String ist seit 2009 (seit PowerShell 2.0 onboard war) ein Windows-„Bordmittel“ … es war sogar schon bereits Bestandteil der PowerShell 1.0 – d. h., dieses cmdlet gibt es seit 12 Jahren.
findstr ist wirklich keine Alternative zu grep, Select-String jedoch schon.