Mit find, grep und findstr Text suchen und ausgeben in Dateien und Unterverzeichnissen.

Bei der Suche nach Zeichenfolgen in Dateien bedient man sich gebräuchlich des Windows Explorer oder Windows-Search, bei Linux mit Gnome Desktop ist es Nautilus oder Nemo, und unter macOS geht man zum Finder.
Bei der automatisierten Verarbeitung durch Scripts und Batch-Prozesse helfen Command-Line Befehle. In diesem Post wird gezeigt, wie man bei der Suche von Zeichenfolge vorgehen kann, in Windows Command Prompt und in der Linux Shell.
Suchen mit findstr in der Eingabeaufforderung
Bei der Windows Eingabeaufforderung (cmd) bietet sich der Befehl „findstr“ (find string) an, wie folgendes Beispiel zeigt.
findstr /s /i "dolor" *.*
doc.txt:Lorem ipsum dolor sit amet
Soll nun das Resultat einer Variable zugewiesen werden, für die weiterverarbeitung in Scripts, kann dies in einer FOR-Schleife ermöglicht werden.
findstr in FOR-Schleife anwenden
Folgende Zeilen werden in einer Batch Datei gespeichert und ausgeführt.
@echo off
for /f "delims=" %%A in ('dir ^| findstr /s /i "dolor" *.*') do set "var=%%A"
echo %var%
Es wird mit echo
die gesamte Zeile mit dem gesuchten Wort dolor ausgegeben.
findstr Zeichen Ausgabe eingrenzen
Möchte man die Ausgabe nur auf die Zeichen eines Wortes eingrenzen, ist dies mit Variablen Parameter zu erreichen.
doc.txt:Lorem ipsum dolor sit amet
1234567890123456789012345678901234
Ab dem Zeichen 20 ist unser Wort dolor
, es ist 5 Zeichen lang.
Die CLI Eingabe findstr dolor
bringt nun dolor
zur Ausgabe die in der Datei doc.txt gefunden wurde.
@echo off
for /f "delims=" %%A in ('dir ^| findstr /s /i %1 *.*') do set "var=%%A"
echo %var:~20,5%
Der Variable var
wird die Ausgabe von findstr
zugewiesen.
Suchen mit grep und find in der Linux Shell
$ grep -r "dolor" *
Dokumente/doc.txt:Lorem ipsum dolor sit amet
In der Linux Shell Konsole kommt grep und find zur Anwendung.
$ find . -type f -print0 | xargs -0 grep "dolor"
./Dokumente/doc.txt:Lorem ipsum dolor sit amet
Die Textsuche mit grep
gestaltet sich wie folgt, das Resultat wird der Variable var
zugewiesen, und mit echo
ausgegeben.
$ var=`grep -r "dolor" *`
$ echo $var
Dokumente/doc.txt:Lorem ipsum dolor sit amet
Es soll bei der Suche mit grep
nicht die gesamte Zeile ausgegeben werden, sondern nur das dritte Wort.
$ var=`grep -r "dolor" * | awk '{ print $3 }'`
$ echo $var
dolor
Fazit
Es gibt viele weitere Möglichkeiten mit grep und find in Linux, und findstr bei Windows ein Text ausgeben. Die mächtigen Befehle grep und find in der Linux Shell bieten zahlreiche Möglichkeiten. Der Befehl find ist sehr umfangreich und ermöglicht mit xargs auch reguläre Ausdrücke und weitere Befehle zur Übergabe. Mit find --help
erhält man sämtliche Anwendungsmöglichkeiten. Hier soll lediglich ein Einstieg zur Anwendung und die Vorgehensweise aufgezeigt werden.