Beschleunigt und gezielt suchen und finden mit Ripgrep

Aus LinuxUser 09/2023

Beschleunigt und gezielt suchen und finden mit Ripgrep

© alphaspirit / 123RF.com

Grep in Rust

Ripgrep vereint das Beste aus Tools wie Grep, Ack und Silver Searcher, wenn es um das Auffinden von Suchmustern im Terminal geht.

Wenn Sie Code oder Dateien nach bestimmten Zeichenketten durchsuchen möchten, können Sie auf einige mächtige Unix-Werkzeuge für die Kommandozeile zurückgreifen wie Ack [1] und Grep [2]. Beide benutzen für die Suchmuster reguläre Ausdrücke. Häufig kommt für diese Art der Suche Grep zum Einsatz, obwohl Ack in Sachen Funktionalität einen kleinen Vorsprung hat. Um die beiden Veteranen soll es hier allerdings nicht gehen. Wir erwähnen sie lediglich, da sie die Basis von Ripgrep bilden. Silver Searcher mit ähnlicher Ausrichtung [3] ist ein Fork von Ack mit dem Ziel einer schnelleren Suche.

Hinter Ripgrep [4] steckt eine Umsetzung von Grep in der Sprache Rust, was das Suchen ebenfalls beschleunigt. Das Tool durchsucht Verzeichnisse rekursiv nach einem Muster von regulären Ausdrücken (Regex) und gibt alle gefundenen Übereinstimmungen nach Dateien sortiert aus. Es gehört zu einer Sammlung von modernisierten Unix-Tools [5], von denen wir einige bereits in LinuxUser vorgestellt haben. Ripgrep übernimmt zusätzlich Eigenschaften von Ack und Silver Searcher, wie das Durchsuchen eines kompletten Verzeichnisbaums. Es will allerdings kein vollständiger Ersatz für Grep sein, denn es deckt dessen Anwendungsfälle nicht hundertprozentig ab.

Ein Vorteil der Programmiersprache Rust liegt in ihrer Geschwindigkeit, weswegen in den letzten Jahren viele Linux-Werkzeuge in Rust umgeschrieben wurden. Dazu zählt unter anderem Ripgrep, das speziell darauf abzielt, die Suche nach Zeichenketten in großen Dateien oder Verzeichnissen so effizient wie möglich zu gestalten. Die Syntax der Anwendung lernen Sie intuitiv und leicht. Das Tool bietet eine klare und konsistente Ausgabe, die gefundene Zeilen hervorhebt und die Ergebnisse übersichtlich präsentiert, ohne dazu Optionen zu benötigen, die bei Grep für vergleichbare Ergebnisse notwendig wären. Dazu zählen beispielsweise die Suche nach regulären Ausdrücken, das Ignorieren von bestimmten Dateitypen oder das rekursive Durchsuchen von Verzeichnissen. Ripgrep ignoriert standardmäßig symbolische Links sowie versteckte und binäre Dateien. Git-Nutzern hilft es bei der Codesuche durch die Honorierung von .gitignore [6].

Ein weiterer Vorteil besteht in der Verfügbarkeit nicht nur unter Linux, sondern auch unter MacOS und Windows. Wenn Sie also auf mehreren Plattformen arbeiten, müssen Sie lediglich eine Syntax verinnerlichen. Zudem findet sich Ripgrep in den Repositories vieler Distributionen in der aktuellen Version 13.0.0 [7]. Unter MacOS nutzen Sie Homebrew, um das Paket zu installieren, unter Windows Chocolatey, Winget oder Scoop.

Wie bereits erwähnt, verwendet Ripgrep eine recht eingängige Syntax. Wir vermitteln im Folgenden ein paar einfache Beispiele für den Einstieg. Die ausführbare Datei von Ripgrep heißt rg. Um eine Zeichenkette im aktuellen Verzeichnis und seinen Unterverzeichnissen zu finden, verwenden Sie im einfachsten Fall den Befehl rg -i Suchbegriff. Die Option -i steht wie bei Grep für das Ignorieren von Groß- oder Kleinschreibung. Möchten Sie explizit ausschließlich Fundstellen mit Groß- oder Kleinschreibung eines Begriffs sehen, verwenden Sie den Parameter -s, gefolgt vom Suchbegriff in der gewünschten Schreibweise.

Ripgrep zeigt zunächst den Pfad und den Dateinamen der jeweiligen Fundstelle an und listet dann alle Vorkommen des Suchbegriffs mit der jeweiligen Zeilennummer auf. Den Suchbegriff hebt die Anwendung rot hervor (Abbildung 1). Je nach Suchbegriff kann die Ausgabe schon ohne Pfadangabe sehr lang ausfallen. Dann ist es sinnvoll, den Suchbefehl wie in der ersten Zeile von Listing 1 soweit als möglich durch die Eingabe eines Pfads einzugrenzen (Abbildung 2).

Abbildung 1: Die Suche ohne Pfadangabe sollten Sie nur nutzen, wenn Sie wissen, dass die Ausgabe überschaubar bleibt.

Abbildung 1: Die Suche ohne Pfadangabe sollten Sie nur nutzen, wenn Sie wissen, dass die Ausgabe überschaubar bleibt.

Listing 1

Ripgrep-Beispiele

$ rg -i fahrrad Nextcloud3/Linux-User/
$ rg Suchbegriff -g '*.Typ'
$ rg -i fahrrad --type not txt
$ rg -l Suchbegriff
$ rg -i port /etc/ssh/sshd_config

Abbildung 2: Die Eingrenzung über den Pfad bringt eine zielgenaue Ausgabe. Neben dem Pfad zur Datei zeigt das Tool die Zeilennummer an, in der der Paragraf mit dem Suchbegriff beginnt.

Abbildung 2: Die Eingrenzung über den Pfad bringt eine zielgenaue Ausgabe. Neben dem Pfad zur Datei zeigt das Tool die Zeilennummer an, in der der Paragraf mit dem Suchbegriff beginnt.

Kennen Sie den genauen Pfad oder Dateinamen nicht, wissen aber, um welchen Dateityp es sich handelt, hilft die Option -g (Listing 1, zweite Zeile). Umgekehrt können Sie Dateitypen mithilfe des Parameters --type ausschließen (Zeile 3). Wenn Sie die einzelnen Fundstellen nicht benötigen, sondern lediglich die Dateien, in denen Treffer auftreten, kommt die Option -l ins Spiel (Zeile 4). Eine alphabetische Sortierung im Zusammenhang mit -l erreichen Sie mit --sort path am Ende des Kommandos (Abbildung 3).

Abbildung 3: Wenn Sie wissen m&ouml;chten, in welchen Dateien der Suchbegriff steckt, liefert Ihnen die Option <code>-l --sort path</code> das Resultat alphabetisch sortiert.

Abbildung 3: Wenn Sie wissen möchten, in welchen Dateien der Suchbegriff steckt, liefert Ihnen die Option -l --sort path das Resultat alphabetisch sortiert.

Angenommen, Sie möchten aus Gründen der Sicherheit den Port von SSH ändern. Dazu möchten Sie die Zeile in der Konfigurationsdatei herausfinden, um diese mit einem Editor direkt anzuspringen. In diesem Fall geben Sie nicht nur den Pfad, sondern auch die Datei an, in der sich der Begriff befindet. Zunächst ermitteln Sie über den Aufruf aus der fünften Zeile von Listing 1 die Zeilennummer. Die Port-Angabe steht in unserem Beispiel in Zeile 14. In Editoren wie Nano oder Vim springen Sie anschließend durch die Angabe von +14 im Aufruf direkt zu dieser Zeile, um den Port zu ändern (Abbildung 4).

Abbildung 4: Sobald Sie die Zeilennummer des Suchbegriffs in einer Konfigurationsdatei kennen, k&ouml;nnen Sie diese mit Nano oder Vim direkt anspringen.

Abbildung 4: Sobald Sie die Zeilennummer des Suchbegriffs in einer Konfigurationsdatei kennen, können Sie diese mit Nano oder Vim direkt anspringen.

Häufig spielen zudem statistische Werte eine tragende Rolle – etwa, wie oft ein Begriff in wie vielen Zeilen auftaucht, wie lange die Suche dauerte und wie viele Dateien durchstöbert wurden. Solche Informationen erscheinen am Ende der Ausgabe, wenn Sie die Option --stats an den Suchbefehl anhängen (Abbildung 5).

Abbildung 5: Statistische Werte unter anderem zur Anzahl der Fundstellen, der Zahl der durchsuchten Dateien und der ben&ouml;tigten Zeit liefert die Option <code>--stats</code>.

Abbildung 5: Statistische Werte unter anderem zur Anzahl der Fundstellen, der Zahl der durchsuchten Dateien und der benötigten Zeit liefert die Option --stats.

Möchten Sie etwas mehr Kontext erhalten, als Ripgrep standardmäßig ausgibt, setzen Sie die Option -C n ein. Dabei bezeichnet n die Anzahl der Zeilen vor und nach der Fundstelle, die Sie mit einsehen möchten. Um eine bestimmte Anzahl Zeilen ausschließlich vor der Fundstelle zu erhalten, nutzen Sie -B n, für Zeilen danach leistet -A n dasselbe. Komprimierte Textarchive durchsuchen Sie mit der Schalterkombination -z -a (Abbildung 6).

Abbildung 6: Ripgrep durchst&ouml;bert auf Wunsch auch Archive nach dem Gesuchten.

Abbildung 6: Ripgrep durchstöbert auf Wunsch auch Archive nach dem Gesuchten.

Fazit

Ripgrep stellt nicht den Anspruch, Grep zu ersetzen. Zum einen verhält es sich teilweise anders, zum anderen deckt es nicht sämtliche Funktionen des Vorbilds ab.

Das Werkzeug zielt mehr auf die Mustersuche ab, während der Grep-Entwickler Ken Thompson sein Tool hauptsächlich für das Verarbeiten von Datenströmen [8] bei AT&T Unix v6 entwarf. Beispielsweise können Sie GNU Grep nur in Zusammenarbeit mit Find zur rekursiven Suche in Verzeichnissen verwenden, während Ripgrep diese Aufgabe ohne Unterstützung bewältigt.

Ripgrep bietet viel mehr Funktionen, als dieser Artikel vermitteln kann. Die ausführliche Dokumentation [9] hilft beim Ausloten des vollen Funktionsumfangs. Wenn Sie sich für die Unterschiede zwischen diversen Suchwerkzeugen interessieren, lohnt sich außerdem ein Besuch bei Beyondgrep.com [10]: Die Seite vergleicht ausführlich die Funktionen von Ack, Silver Searcher, Git-Grep, GNU Grep und Ripgrep. (csi)

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDF
LinuxUser 09/2023 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben