Main /

Dateien nach Inhalt wiederfinden mit grep

Dateien nach Inhalt wiederfinden mit grep

Dateien nach Inhalt wiederfinden mit grep

Um Dateien nach Inhalt zu suchen gibt es 'grep' oder 'egrep'

 egrep -r -n -i 'blah' *

Sucht von hier in allen Dateien (*) rekursiv durch alle Directories (-r), in denen ein case-insensitive blah enthalten ist. Leider wird auch in Binärdateien gesucht und falls gefunden diese auch ausgegeben. Das legt zum Teil die Shell lahm, da diese falls das gefundene irgendwie als ANSI-Steuersequenz interpretiert werden kann, es auch so interpretiert.

Im schlimmsten Fall kann man also nichts mehr lesen. Sollte das passiert sein, läßt sich die Shell meist durch eine blinde Eingabe von 'reset' wieder benutzbar machen.

Dateien nach Inhalt finden mit find und xargs

 find . -name '*.ext' -exec grep 'search' {} \;

Achtung! Findet Dateien mit 'search' nur leider wird man im unklaren darüber gelassen, in welcher Datei es auftrat.

So funktioniert es richtig:

 find . -name '*.ext' -print0 | xargs -0 grep "search"

Zu lesen ist die Zeile wie folgt: Suche von hier ('.') nach Dateinamen die '*.ext' enthalten und suche in diesen Dateien ob sie 'search' enthalten.

Zuerst wird mittels find nach entsprechenden Dateien gesucht, dann wird das Ergebnis über -print0 | xargs -0 grep an grep übergeben. Diese Schreibweise hat den Vorteil, das im Ergebnis mit drin steht, in welcher Datei das gesuchte gefunden wurde.

Falls nur die Dateinamen interessieren, aber nicht was da drin steht, hänge man an 'grep' einfach ein kleines L an.

 find . -name '*.ext' -print0 | xargs -0 grep -l "search"

Achtung! Wenn man den Parameter '-n 1' bei xargs angibt, braucht grep ein '-H' damit Dateiname:Inhalt angezeigt werden soll.

 find . -type f -print0 | xargs -n 1 -0 grep -H 'search'

In Zeiten von "one-liner" Stuff, also alles in einer Zeile: 'grep' ist mit Hilfe von Regex (-P) in der Lage vor und hinter dem Suchstring eine beliebige Anzahl an Zeichen auszugeben. Das Ergebnis soll in einer eigenen Zeile repräsentiert werden (-o).

 find . -type f -print0 | xargs -0 grep -o -P '.{0,62}search{0,27}'

Verwandte Themen

Frische Änderungen | Menü editieren
zuletzt geändert am 16.09.2020 14:01 Uhr von Lars
Edit Page | Page History