Freitag, 1. Juli 2016

Schnelles suchen in der Shell

Manchmal muss man nur schnell eine Datei finden, oder Textdateien nach Inhalt durchsuchen. Gerade im Bereich Programmieren benötigt man oft die Suche in Dateien nach Textabschnitten.

Unter Ubuntu (und Linux) gibt es hier die beiden Programme "find" und "grep". Während "find" sich auf die  Suche nach Dateinamen macht und alle Unterverzeichnisse mit durchsucht, ist "grep" für den Inhalt von Dateien zuständig. Mittels "grep" kann man alle Textdateien einer Verzeichnisstruktur nach dem Vorkommen eines Wortes durchsuchen lassen.

Beispiel um einen Dateinamen zu suchen:

find -name suchmich.txt

Durchsucht alles ab dem aktuellen Ordner nach der Datei "suchmich.txt". Die Fundstellen werden mit Pfad aufgelistet.

Wenn wir ein Textfragment in Dateien suchen wollen. benutzen wir grep. Diesem übergeben wir den Suchbegriff.

grep -R "suchtest"

Mit diesem Befehl werden alle Dateien im Unterverzeichnis nach dem Vorkommen des Suchbegriffes durchsucht. Wenn man das Parameter "-n" noch benutzt bekommt man die Zeilennummer noch mit ausgegeben, sodass man sich in der Datei schneller zurechtfindet.

Diese zwei unscheinbaren Befehle sind bei Ubuntu von Hause aus installiert und können durchaus nützlich sein.

Kommentare:

  1. 'find' und 'grep' sind ja die Standard-Tool dafür. Sucht man nur in bestimmten Dateitypen, wird's aber umständlich und oft ziemlich langsam. In diesem Fall ist 'ack-grep' oder kurz 'ack' oft deutlich schneller und nebenbei viel komfortabler.

    AntwortenLöschen
  2. "Schnell suchen" als Topic und dann find im Text. Schnell ist was anderes. :-P

    Nämlich locate. Dafür nciht ganz so aktuell.

    AntwortenLöschen
  3. Ja, dass mit dem -nn war n guter Tipp für mich, Danke :-)

    AntwortenLöschen
  4. Hi, der "grep" Befehl kann via "find" um einiges beschleunigt werden: z.B. find -iname '*.html' -exec grep -i 'suchtest' {} \;

    Außerdem ist "locate" (updatedb) sehr praktisch um schnell Dateien zu finden. (da dieser Befehl nicht direkt auf der Festplatte sucht, sondern in einer Datenbank welche man via "updatedb" aktualisieren kann.

    "ack" ist eine alternative zu grep, welche in der meisten Fällen schneller ist, da z.B. Binärdateien ignoriert werden. In der .ackrc Datei kann man noch einige Einstellungen vornehmen z.B. https://github.com/voku/dotfiles/blob/master/.ackrc

    Mfg Lars

    AntwortenLöschen
  5. Ich nutze hier ack. Liefert mir genau das, was ich benötige. http://agvpb.square7.ch/ack/

    AntwortenLöschen