Ack ist besser als grep

Ich möchte Ihnen von einem Suchdienstprogramm erzählen, das das Leben erheblich vereinfacht. Wenn ich am Server ankomme und nach etwas suchen muss, überprüfe ich als Erstes, ob ack installiert ist. Dieses Dienstprogramm ist ein hervorragender Ersatz für grep und in gewissem Umfang auch für find und wc. Warum nicht grep? Ack bietet standardmäßig schönere Einstellungen, besser lesbare Optionen, Perl-Regex und ein Konfigurationssystem. Wenn Sie das Terminal durchsuchen möchten (müssen), sollten Sie es unbedingt versuchen.

Grundfunktionen

Ack ist standardmäßig rekursiv und es ist immer eine gute Idee, weniger Optionen zu schreiben.

Wir können eine Flagge verwenden -wum das Dienstprogramm anzuweisen, nach einer Instanz unseres Musters zu suchen, das von Wortgrenzen (Leerzeichen, Schrägstriche usw.) umgeben ist.

ack -w mysql

Ack ist besser als grep

Ack unterstützt die Suche nach Dateityp. Suchen wir beispielsweise die Modulversion in JSON-Dateien.

ack --json '"version":s+"d+.d+.d+"'

Ack ist besser als grep

Eine vollständige Liste der unterstützten Dateitypen kann angezeigt werden mit:

ack --help-types

Oft müssen Sie zählen, wie oft eine Phrase in einer Protokolldatei vorkommt, um beispielsweise zu verstehen, wie viele Daten das Skript verarbeitet hat.

Ack ist besser als grep
Wir zählen, wie oft der Prozess in der Datei test.log auftritt, ohne Berücksichtigung der Groß- und Kleinschreibung (-i).

Wir können Vorkommen nicht nur in einer bestimmten Datei, sondern auch in einer Gruppe zählen. Schließen wir die vorherige Suche nach dem Wort mysql ab: Zählen Sie die Häufigkeit des Vorkommens von Wörtern (-mit) in *.js-Dateien(--js), ausgenommen Dateien, in denen nichts gefunden wurde (-h) und das Ergebnis zusammenfassen.

# выведем на экран все вхождения
ack --js -w mysql
# считаем общую сумму вхождений
ack --js -wch mysql

Ack ist besser als grep

Darüber hinaus können wir einen detaillierten Bericht über die Anzahl der Vorkommen in jeder Datei erhalten, indem wir (-l)

ack --js -w -cl mysql

Ack ist besser als grep

Wenn Sie zusätzlichen Kontext für Ihre Suche benötigen, können Sie „ack“ fragen
Zeige Zeilen bis (-B) und danach (-A) des gefundenen Ausdrucks. Dazu müssen Sie hinter der Option die Anzahl der anzuzeigenden Zeilen angeben.

# 2 строки до 
ack --js --column -B 2 "query.once('" ./lib/

Ack ist besser als grep

# 2 строки после 
ack --js --column -A 2 "query.once('" . /lib/

Ack ist besser als grep

Und wenn Sie beides benötigen, dann verwenden Sie (-VON)

ack --js --column -C 2 "query.once('" ./lib/

Es gibt auch eine Option(-v), um die Suche umzukehren, d. h. Zeilen anzuzeigen, die kein bestimmtes Muster enthalten.

Regulären Ausdruck

Ack verwendet im Gegensatz zu grep Perl-kompatible Ausdrücke.
Für mich ist das ein großes Plus, ich muss mir keine eigene Syntax für reguläre Ausdrücke merken.

ack 'vars+adds+'

Ack ist besser als grep

Komplexeres Beispiel

ack '*s+[vd+.d+.d+]'

Ack ist besser als grep

Oft möchten Sie in den Ergebnissen nur das belassen, was der Vorlage entspricht. Hier hilft die Option --output (-o)

ack -o '*s+[vd+.d+.d+]'

Ack ist besser als grep

Darüber hinaus können wir mithilfe von Klammern das gefundene Teil auswählen und in der Ausgabe über die Variable $[Gruppennummer] darauf zugreifen. Zum Beispiel,

ack --output='version is $1' '*s+[v(d+.d+.d+)]'

Ack ist besser als grep

Ack bietet nützliche Optionen --range-start и --range-end. Sie helfen, wenn
Die Daten werden nicht in einer Zeile, sondern in mehrzeiliger Form gespeichert.

Es gibt zum Beispiel eine Datei mit SQL-Code

Ack ist besser als grep

Extrahieren wir die Spaltennamen. Der Anfang des Blocks ist eine Zeile, die mit SELECT beginnt, und das Ende ist eine Zeile, die mit FROM beginnt.

ack --range-start ^SELECT --range-end ^FROM 'td+.' ./test.sql

Ack ist besser als grep

Wenn der Suchausdruck Sonderzeichen wie einen Punkt, eine Klammer und andere enthält, können Sie die Option verwenden, um diese nicht mit zu maskieren -Q.

# Поиск с экранированием 
ack --json 'mysql.'    
# Поиск без экранирования
ack --json -Q mysql.

Ack ist besser als grep

Arbeiten mit Dateien

Rufen Sie eine Liste von Dateien mit einer bestimmten Erweiterung ab

ack -f --js

Ack ist besser als grep

Finden Sie alle js-Dateien, deren Name mit P* beginnt, mit der Option (-g).

ack -g --js '/Pa.+.js$'

Ack ist besser als grep

Konfiguration

Das Dienstprogramm verfügt über eine eigene Konfigurationsdatei. Sie können sowohl eine globale Konfiguration für den Benutzer (~/.ackrc) als auch eine lokale für einen bestimmten Ordner haben (Sie müssen eine .ackrc-Datei im Ordner erstellen).

Die meisten Optionen, die in den Konfigurationen geschrieben sind, können beim Aufruf manuell angegeben werden. Schauen wir uns einige davon an.

Ordner bei der Suche ignorieren

--ignore-dir=dist

Fügen wir einen benutzerdefinierten Dateityp hinzu –vue.

--type-add=vue:ext:js,vue

Jetzt können Sie die Option --vue zum Durchsuchen von Dateien verwenden .vue. Zum Beispiel: ack --vue App.
Sie können für diese Option eine Liste von Erweiterungen angeben. Hier wird beispielsweise bei Verwendung von -vue Folgendes verarbeitet:
.js-Dateien.

Ignorieren Sie Dateien, zum Beispiel minimierte *.min.js

--ignore-file=match:/.min.js$/

Einstellung

CentOS

yum update -y && yum install ack -y

Ubuntu

apt-get update -y && apt-get install ack-grep -y

Mac OS

brew update && brew install  ack

Installation von der Website

curl https://beyondgrep.com/ack-v3.3.1 > ~/bin/ack && chmod 0755 ~/bin/ack

Plugins für Redakteure:

Abschluss

Das sind nicht alle Möglichkeiten. Die vollständige Liste der Funktionen kann angezeigt werden, indem Sie Folgendes ausführen:

ack –-help
# или
ack --man

Mit dem Dienstprogramm ack können Sie die Suche im Terminal komfortabler und flexibler gestalten. Und mit Pipeline (ack -C 10 hallo | ack Welt) können Sie eine leistungsstarke Kombination zum Suchen und Filtern von Daten im Dateisystem und in den Dateien selbst erstellen.

Source: habr.com

Kommentar hinzufügen