Allgemein
Knowledge Base
- Neue Struktur (In Arbeit)
- Computertechnisches
Community
Privat
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.
find . -name '*.ext' -exec grep 'search' {} \;
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"
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}'