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.

Kommentare
#1 Phil schrieb am 8.3.2011 9:21 folgendes:
Mit einer anständigen Shell™ wie zsh erspart man sich übrigens den
findOverhead: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
TrackBack-URL:
http://gwendragon.de/blog/Computer/Linux/Tools/ack-besser-als-grep.html/trackback↑Artikel