Ich möchte über ein Suchtool sprechen, das das Leben erheblich vereinfacht. Wenn ich auf einen Server komme und etwas suchen muss, überprüfe ich zuerst, ob ack installiert ist. Dieses Tool ist ein hervorragender Ersatz für grep und in gewisser Weise auch für find und wc. Warum nicht grep? Ack bietet angenehmere Voreinstellungen, benutzerfreundlichere Optionen, Perl-kompatible reguläre Ausdrücke und ein Konfigurationssystem. Wenn Sie gerne (oder auch müssen) über das Terminal suchen, sollten Sie es auf jeden Fall ausprobieren.
Grundlegende Funktionen
Ack ist standardmäßig rekursiv, und weniger Optionen zu schreiben ist immer gut.
Wir können das Flag -w, verwenden, um dem Tool zu sagen, dass es nach einer Instanz unseres Musters suchen soll, die durch Wortgrenzen (Leerzeichen, Schrägstriche usw.) umgeben ist.
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 dem folgenden Befehl abgerufen werden:
ack --help-typesOft muss man zählen, wie oft eine Phrase in einer Log-Datei vorkommt, um zu verstehen, wie viele Daten das Skript verarbeitet hat.
![]()
Zählen wir, wie oft process in der Datei test.log vorkommt, ohne die Groß-/Kleinschreibung zu berücksichtigen (-i).
Wir können Vorkommen nicht nur in einer bestimmten Datei zählen, sondern in einer Gruppe. Lassen Sie uns das vorherige Suchmuster für mysql anpassen: Zählen wir die Anzahl der Vorkommen des Wortes (-c) in *.js-Dateien (—js), und schließen die Dateien aus, in denen nichts gefunden wurde (-h) und summieren das Ergebnis.
# выведем на экран все вхождения
ack --js -w mysql
# считаем общую сумму вхождений
ack --js -wch mysql
Darüber hinaus können wir mit dem Befehl (-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 (
) und nach (-B) dem gefundenen Ausdruck anzuzeigen. Dazu müssen Sie nach der Option die Anzahl der Zeilen angeben, die angezeigt werden sollen.-AUnd wenn beides notwendig ist, verwenden Sie (
# 2 строки до
ack --js --column -B 2 "query.once('" ./lib/
# 2 строки после
ack --js --column -A 2 "query.once('" . /lib/
-Cack --js --column -C 2 "query.once('" ./lib/)
Es gibt auch die Option (), um die Suche umzudrehen, d.h. Zeilen anzuzeigen, in denen das angegebene Muster nicht vorhanden ist.-vReguläre Ausdrücke
Ack verwendet im Gegensatz zu grep Perl-kompatible Ausdrücke.
Das ist für mich ein großer Vorteil, da ich mir keinen separaten Syntax für reguläre Ausdrücke merken muss.
ack 'vars+adds+'
ack '*s+[vd+.d+.d+]'
Ein komplexeres Beispiel
Oft möchte man in den Ergebnissen nur das anzeigen, was mit dem Muster übereinstimmt. Hier hilft die Option —output (
ack -o '*s+[vd+.d+.d+]'-o)
Außerdem können wir mit runden Klammern den gefundenen Teil hervorheben und in der Ausgabe über die Variable $[Gruppennummer] darauf zugreifen. Zum Beispiel:
ack --output='version is $1' '*s+[v(d+.d+.d+)]'
Ack hat nützliche Optionen
—range-start —range-end und . Sie helfen, wennDaten nicht in einer Zeile, sondern mehrzeilig gespeichert sind.
Zum Beispiel gibt es eine Datei mit SQL-Code
Lassen Sie uns die Spaltennamen extrahieren. Der Beginn des Blocks wird durch eine Zeile gekennzeichnet, die mit SELECT beginnt, und das Ende durch eine Zeile, die mit FROM beginnt.

ack --range-start ^SELECT --range-end ^FROM 'td+.' ./test.sql
Wenn im Suchausdruck spezielle Zeichen wie Punkte, runde Klammern und andere verwendet werden, können Sie die Option
-Q verwenden, um sie nicht mit Escaping zu versehen..
# Поиск с экранированием
ack --json 'mysql.'
# Поиск без экранирования
ack --json -Q mysql.
Arbeiten mit Dateien
Eine Liste von Dateien mit einer bestimmten Erweiterung erhalten
ack -f --js
Suchen Sie alle js-Dateien, deren Name mit P* beginnt, und verwenden Sie die Option (-g).
ack -g --js '/Pa.+.js$'
Konfiguration
Das Tool hat eine Konfigurationsdatei. Es kann sowohl eine globale Konfiguration für den Benutzer (~/.ackrc) als auch eine lokale für einen bestimmten Ordner geben (in diesem Ordner muss eine Datei .ackrc erstellt werden).
Die meisten der in Konfigurationen festgelegten Optionen können auch direkt beim Aufruf angegeben werden. Lassen Sie uns einige von ihnen näher betrachten.
Ein Verzeichnis bei der Suche ignorieren
--ignore-dir=distFügen wir einen benutzerdefinierten Dateityp hinzu —vue.
--type-add=vue:ext:js,vueJetzt können wir die Option —vue verwenden, um in Dateien zu suchen .vue. Zum Beispiel: ack —vue App.
Dabei kann eine Liste von Erweiterungen für diese Option angegeben werden. Diese Option wird zum Beispiel auch bei Verwendung von —vue auf .js-Dateien angewendet. --ignore-file=match:/.min.js$/
Игнорировать файлы, например, минифицированные *.min.js
yum update -y && yum install ack -yInstallation
CentOS
apt-get update -y && apt-get install ack-grep -yUbuntu
Mac OSbrew update && brew install ack
Installation von der Websitecurl https://beyondgrep.com/ack-v3.3.1 > ~/bin/ack && chmod 0755 ~/bin/ack
Plugins für Editoren:VSCode
Fazit
ack –-help # oder ack --man
Das Tool ack ermöglicht es, die Suche im Terminal komfortabler und flexibler zu gestalten. Und mit der Pipeline (ack -C 10 hello | ack world) kann ein leistungsstarker Kombinator für die Suche und Filterung von Daten im Dateisystem und in den Dateien selbst erstellt werden.Ich möchte über ein Suchtool sprechen, das das Leben erheblich vereinfacht. Wenn ich auf einen Server komme und etwas suchen muss, überprüfe ich zuerst, ob ack installiert ist. Dieses Tool ist ein hervorragender Ersatz für grep und in gewisser Weise auch für find und wc. Warum nicht grep? Ack bietet angenehmere Voreinstellungen, benutzerfreundlichere
Quelle: habr.com
