Ich möchte über ein Suchwerkzeug sprechen, das das Leben erheblich erleichtert. Wenn ich auf einen Server komme und etwas suchen muss, überprüfe ich zunächst, ob ack installiert ist. Dieses Werkzeug ist ein hervorragender Ersatz für grep und in gewissem Maße auch für find und wc. Warum nicht grep? Ack bietet angenehmere Standardeinstellungen, menschenlesbare Optionen, Perl-reguläre Ausdrücke und ein Konfigurationssystem. Wenn Sie gerne (oder müssen) über das Terminal suchen, sollten Sie es unbedingt ausprobieren.
Grundlegende Funktionen
Ack ist standardmäßig rekursiv, und es ist immer gut, weniger Optionen anzugeben.
Wir können das Flag -w, verwenden, um dem Werkzeug zu sagen, dass es nach einer Instanz unseres Musters suchen soll, umgeben von Wortgrenzen (Leerzeichen, Schrägstrich usw.).
ack -w mysql
Ack unterstützt die Suche nach Dateitypen. Zum Beispiel suchen wir die Version eines Moduls in JSON-Dateien.
ack --json '"version":s+"d+.d+.d+"'
Die vollständige Liste der unterstützten Dateitypen kann mit folgendem Befehl abgerufen werden:
ack --help-typesOft muss gezählt werden, wie oft ein Ausdruck in einer Protokolldatei erscheint, um zu verstehen, wie viele Daten das Skript verarbeitet hat.
![]()
Zählen wir, wie oft das Wort process in der Datei test.log erscheint, ohne die Groß-/Kleinschreibung zu berücksichtigen (-i).
Wir können Vorkommen nicht nur in einer bestimmten Datei, sondern in einer Gruppe zählen. Lassen Sie uns die vorherige Suche nach dem Wort mysql erweitern: Zählen wir die Anzahl der Vorkommen des Worts (-c) in *.js-Dateien (—js), wobei wir Dateien ausschließen, in denen nichts gefunden wurde (-h) und die Ergebnisse summieren.
# выведем на экран все вхождения
ack --js -w mysql
# считаем общую сумму вхождений
ack --js -wch mysql
Darüber hinaus können wir einen detaillierten Bericht über die Anzahl der Vorkommen in jeder Datei mit (-l)
ack --js -w -cl mysql
Wenn Sie zusätzlichen Kontext für die Suche benötigen, können Sie ack bitten,
die Zeilen vor (-B) und nach (-A) dem gefundenen Ausdruck anzuzeigen. Dazu müssen Sie die Anzahl der Zeilen angeben, die angezeigt werden sollen.
# 2 строки до
ack --js --column -B 2 "query.once('" ./lib/
# 2 строки после
ack --js --column -A 2 "query.once('" . /lib/
Wenn Sie beides benötigen, verwenden Sie (-C)
ack --js --column -C 2 "query.once('" . /lib/Es gibt auch die Option (-v) für eine umgekehrte Suche, d.h. Zeilen anzuzeigen, in denen das angegebene Muster nicht vorhanden ist.
Reguläre Ausdrücke
Ack verwendet im Gegensatz zu grep Perl-kompatible Ausdrücke.
Für mich ist das ein großer Vorteil, da ich mir keinen separaten Syntax für reguläre Ausdrücke merken muss.
ack 'vars+adds+'
Ein komplexeres Beispiel
ack '*s+[vd+.d+.d+]'
Oft möchte ich in den Ergebnissen nur das behalten, was mit dem Muster übereinstimmt. Hier hilft die Option —output (-o)
ack -o '*s+[vd+.d+.d+]'
Darüber hinaus können wir mit Hilfe von runden Klammern den gefundenen Teil hervorheben und über die Variable $[Gruppennummer] darauf im Output zugreifen. Zum Beispiel,
ack --output='version is $1' '*s+[v(d+.d+.d+)]'
Ack hat nützliche Optionen —range-start und —range-end. Sie helfen, wenn
Daten nicht in einer Zeile gespeichert sind, sondern mehrzeilig dargestellt werden.
Zum Beispiel gibt es eine Datei mit SQL-Code

Lass uns die Spaltennamen extrahieren. Der Block beginnt mit einer Zeile, die mit SELECT beginnt, und endet mit einer Zeile, die mit FROM beginnt.
ack --range-start ^SELECT --range-end ^FROM 'td+.' ./test.sql
Wenn spezielle Zeichen wie Punkt, runde Klammer und andere im Suchausdruck vorkommen, dann kann man statt sie zu maskieren, die Option -Q.
# Поиск с экранированием
ack --json 'mysql.'
# Поиск без экранирования
ack --json -Q mysql.
Arbeit mit Dateien
Eine Liste von Dateien mit einer bestimmten Erweiterung erhalten
ack -f --js
Alle JS-Dateien finden, deren Namen mit P* beginnen, unter Verwendung der Option (-g).
ack -g --js '/Pa.+.js$'
Konfiguration
Das Tool hat seine eigene Konfigurationsdatei. Man kann eine globale Konfiguration für den Benutzer (~/.ackrc) und eine lokale für einen bestimmten Ordner haben (im Ordner muss die Datei .ackrc erstellt werden).
Die meisten Optionen, die in die Konfigurationen geschrieben werden, können auch manuell beim Aufruf angegeben werden. Lassen Sie uns einige davon betrachten.
Ordner bei der Suche ignorieren
--ignore-dir=distWir fügen einen benutzerdefinierten Dateityp – vue hinzu.
--type-add=vue:ext:js,vueJetzt kann man die Option —vue verwenden, um in den Dateien .vue zu suchen. Zum Beispiel: ack —vue App.
Dabei kann eine Liste von Erweiterungen für diese Option angegeben werden. Zum Beispiel werden hier bei der Verwendung von —vue auch .js Dateien verarbeitet.
Игнорировать файлы, например, минифицированные *.min.js
--ignore-file=match:/\.min.js$/Installation
CentOS
yum update -y && yum install ack -yUbuntu
apt-get update -y && apt-get install ack-grep -yMac OS
brew update && brew install ackInstallation von der Website
curl https://beyondgrep.com/ack-v3.3.1 > ~/bin/ack && chmod 0755 ~/bin/ackPlugins für Editoren:
Fazit
Das sind längst nicht alle Möglichkeiten. Die vollständige Liste der Funktionen kann durch Ausführung von
ack –-help
# oder
ack --manDas Tool ack ermöglicht eine angenehmere und flexiblere Suche im Terminal. Und mit Hilfe von Pipeline (ack -C 10 hello | ack world) kann man eine leistungsstarke Kombination zur Suche und Filterung von Daten im Dateisystem und in den Dateien selbst erstellen.
Quelle: habr.com
