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 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 in der Eingabeaufforderung
Bei der Windows Eingabeaufforderung (cmd) bietet sich der Befehl findstr 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, folgende Zeilen werden in einer CMD-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, 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 in der Linux Shell
$ grep -r "dolor" *
Dokumente/doc.txt:Lorem ipsum dolor sit amet
In der Linux bash Console 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 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 die Vorgehensweise aufgezeigt werden.