Sie sind in Kategorie Tools

Brotkrumennavigation


Sonntag, 11. Juli 2010

Besser ack als grep

Schlagworte: , , , ,
11.07.2010 · 18:41

Angeblich gibt es unter Linux für manche Shellentusiasten nichst besseres als die Paar Werkzeuge grep, sort, tail, find, xargs & Co. Nun ja, wer schon mal aufwändiger nach Dateiinhalten suchen musste, verfluchte öfters mal den Rattenschwanz von Pipes und Backticks.

Wo ist das Problem?

Wer mal in Perl-Dateien nach Modulen suchen musste, durfte mit grep, find, sort und uniq hantieren und das eingeben:

 (grep -h -e"^use " `find /u/Projekte/Privat/Programme/Perl/ -name "*.p[lm]"`) | sort | uniq

Für Windowsnutzer ist sowas schon ziemlich gewöhnungebedürftig. Wenn keine Shell vorhanden ist, fällt es sowieso schon weg. Und die selbst als Windows Resourcekit Tools vorhanden Programme können nur den Bruchteil der Linux-Pendants. Und so manche Windows-Shell wie msys-bash ergibt bei manchen getricksten grep-find-sort-uniq-Schlangenausdrücken einfach einen Überlauf, weil die Dateinamen oder Pfade zu lang werden.

Wozu gibt es Perl, jedenfalls auf einem Windows, auf dem solche Programme entwickelt werden, werden manche sagen.
Das mache ich als Einzeiler. Mit einem Perl-Einzeiler mit File::Find und grep wird es aber auch nicht besser. Es sei denn, man ist Perl-Guru wie Larry Wall.
Aber wozu gibt es weitere findige Leute im großen Universum des CPAN und Perl.

Es gibt ack

Ich bin durch googeln nach better grep and find auf ack gestoßen.

ack ist ein in Perl geschriebenes Werkzeug, das auf der Kommandozeile grep ersetzt und zudem mächtiger ist.

ack spart erheblich Zeit beim Eintippen, erhöht also die Effizienz. Heutzutage, wo im harten Entwickleralltag Zeit Geld ist, ganz besonders wichtig.

Was kann ack

ack hat einige Features:

  • ist pures Perl und benutzt Perl-Standardmodule
  • existiert auch als reines Standalone-Programm
  • spart Zeit durch Eintippen kürzerer befehlsfolgen
  • benutzt Perls reguläre Ausdrücke, kein kastriertes Subset
  • Überspringt von Vornherein Dateien von VCS, binäre oder Backupdateien
  • viele der Kommandoschalter sind dieselben wie in grep
  • Suchergebnisse sind gefärbt (falls Konsole ANSI-Sequenzen beherrscht)
  • ist etwas schneller bei komplexen Suchen

Wie ist ack im Vergleich zu grep

Statt also Gräßlichkeiten wie

grep -e '^use CGI::Application' $(find . -name '*.pl' -or -name '*.pm' -or -name '*.pod' | grep -v .svn)

eingeben zu müssen, ist das in ack einfacher zu tippen:

ack --perl '^use CGI::Application'

Wo gibt es ack

ack gibt es unter den verschiedenen Linuxen als Distributionspaket, es kann auch als Standalone-Skript herunter geladen werden.

Zu finden ist es bei ack -- better,than grep.

Autor: GwenDragon · Kategorie Tools · Permalink · Kommentare (1) · Kommentar schreiben

Kommentare

Kommentare als Feed · Kommentar schreiben

#1 Phil schrieb am 8.3.2011 9:21 folgendes:

Mit einer anständigen Shell™ wie zsh erspart man sich übrigens den find Overhead:

grep -e '^use CGI::Application' **/*.{pl,pod,pm}(#qD)~*.svn*

Ich sehe den Mehrwert von ack aber schon, kürzer ist's ja ;-)

↑Artikel


Kommentar für Blogeintrag

Vorschau des Kommentars

Kommentar

Mit * gekennzeichnete Felder müssen angegeben werden.



(Textformatierung in Markdown möglich)

Hinweis zum Datenschutz

Falls es Probleme mit Kommentaren/Trackbacks gibt, bitte ich um eine Beschreibung per E-Mail.

TrackBack-URL: http://gwendragon.de/blog/Computer/Linux/Tools/ack-besser-als-grep.html/trackback

↑Artikel