findstr

findstr ist ein Kommandozeilenbefehl, der ausschließlich in Windows-NT-basierten Betriebssystemen verfügbar ist. Im Gegensatz zum älteren Find, das bereits unter MS-DOS existierte, unterstützt findstr reguläre Ausdrücke und bietet so einen ähnlichen Funktionsumfang zum Unix-Kommando grep.

findstr kann entweder einen oder auch mehrere Dateien nach dem oder den angegebenen regulären Ausdrücken suchen und gibt dann für jedes Suchergebnis die komplette Zeile aus, in der der angegebene reguläre Ausdruck vorkommt.

Kritikpunkte

  • Die Angabe von Bereichen wird anders als in allen anderen Programmen mit regulären Ausdrücken interpretiert: findstr nutzt hier nicht die ASCII-Tabelle, sondern die Unicode Collation Algorithm, die eigentlich einen ganz anderen Zweck hat. Infolgedessen findet eine Suche nach dem Bereich [A-Z] nicht nur die Großbuchstaben A bis Z, sondern auch verschiedene Kombinationen mit Diakritika und auch alle Kleinbuchstaben mit Ausnahme des kleinen a, weil das kleine a vor dem großen A einsortiert wird. Ebenso findet eine Suche nach dem Bereich [0–9] nicht nur die Ziffern 0 bis 9, sondern auch die Zeichen ½, ¼ und das hochgestellte ² (nicht aber das hochgestellte ³). Infolgedessen wird von der Angabe von Bereichen in der Regel ganz abgeraten, da die Ergebnisse völlig unberechenbar sind.[1]
  • Bei manchen Parametern gibt es Probleme, wenn eine Datei unterschiedliche Dateierweiterungen im Langformat und im 8.3-Format hat (was etwa dann vorkommt, wenn die Dateierweiterung länger als drei Zeichen ist). Bei der Nutzung von Wildcards kann es dann mitunter vorkommen, dass gar keine Dateien mehr gefunden werden.[2]
  • Wird eine Datei über die Standardeingabe (findstr < datei.txt) eingelesen und hat diese Datei kein Line Feed als letztes Zeichen, hängt sich das Programm auf, sobald das Dateiende erreicht ist.[2]
  • Unter Betriebssystemen bis Windows XP kann der Suchbefehl nicht länger als 127 Zeichen sein. Ab Windows Vista beträgt die Grenze bei wörtlichen Begriffen 511 Zeichen, bei der Verwendung von regulären Ausdrücken allerdings nur 254 Zeichen.[2]
  • Unter Umständen scheitert die Suche nach mehreren wörtlichen Begriffen aus unerklärlichen Gründen, wenn diese unterschiedlich lang sind.[2]
  • Eine Suche kann nur bis zu 15 Zeichenklassen beinhalten. Werden mehr angegeben, stürzt findstr komplett ab.[2]
  • Nach bestimmten Zeichen kann nicht gesucht werden. Das Nullzeichen 0x00 darf im Suchbegriff nicht vorkommen; in einer Datei wird es ähnlich wie in der Programmiersprache C behandelt; alles, was nach diesem Zeichen kommt, gilt als neue Zeile. Aus diesem Grund unterstützt findstr auch nicht die Suche in Textdateien, die in UTF-16 oder UTF-32 kodiert sind. Ist das Zeichen 0xFF Bestandteil eines regulären Ausdrucks, hängt sich das Programm auf; dies ist aufgrund des von findstr verwendeten Kollationsalgorithmus besonders problematisch, weil dieses Zeichen zwischen dem Leerzeichen und dem Tabulatorzeichen einsortiert wird und deshalb z. B. die Angabe eines Bereichs, der diese beiden Zeichen beinhaltet, automatisch auch 0xFF beinhaltet.[2]

Einzelnachweise

  1. Why does findstr not handle case properly (in some circumstances)? - Stack Overflow
  2. a b c d e f What are the undocumented features and limitations of the Windows FINDSTR command? - Stack Overflow

Weblinks