Suche nach Text und Zeichenfolgen in Dateien und Unterverzeichnissen mit Resultat in Variablen zuweisen
Bei der Suche nach Zeichenfolgen in Dateien bedient man sich gebräuchlich des Windows Explorer oder Windows-Search, bei Linux Gnome Desktop ist es Nautilus oder Nemo, und Konqueror bei KDE, unter macOS nutzt man den 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 in der Eingabeaufforderung
Bei der Windows Eingabeaufforderung (cmd) bietet sich der Befehl findstr an, wie folgendes Beispiel zeigt.
1 2 3 |
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, folgende Zeilen werden in einer CMD-Datei gespeichert und ausgeführt.
1 2 3 4 |
@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, möchte man die Ausgabe nur auf die Zeichen eines Wortes eingrenzen, ist dies mit Variablen Parameter zu erreichen.
1 2 3 |
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.
1 2 3 4 |
@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 in der Linux Shell
1 2 3 |
$ grep -r "dolor" * Dokumente/doc.txt:Lorem ipsum dolor sit amet |
In der Linux bash Console kommt grep und find zur Anwendung.
1 2 3 |
$ 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.
1 2 3 4 |
$ 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.
1 2 3 4 |
$ var=`grep -r "dolor" * | awk '{ print $3 }'` $ echo $var dolor |
Es gibt viele weitere Möglichkeiten vor allem in der Linux bash, der Befehl find ist sehr umfangreich und bietet mit xargs auch reguläre Ausdrücke und weitere Commands zur Übergabe, mit find –help erhält man sämtliche Anwendungsmöglichkeiten. Hier soll lediglich ein Einstieg zur Anwendung und Vorgehensweise aufgezeigt werden.