Ack ist besser als grep.

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 ist besser als grep.

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+"'

Ack ist besser als grep.

Die vollständige Liste der unterstützten Dateitypen kann mit dem folgenden Befehl abgerufen werden:

ack --help-types

Oft muss man zählen, wie oft eine Phrase in einer Log-Datei vorkommt, um zu verstehen, wie viele Daten das Skript verarbeitet hat.

Ack ist besser als grep.
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

Ack ist besser als grep.

Darüber hinaus können wir mit dem Befehl (-l)

ack --js -w -cl mysql

Ack ist besser als grep.

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/

Ack ist besser als grep.

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

Ack ist besser als grep.

-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+]'

Ack ist besser als grep.

Ein komplexeres Beispiel

Oft möchte man in den Ergebnissen nur das anzeigen, was mit dem Muster übereinstimmt. Hier hilft die Option —output (

Ack ist besser als grep.

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 ist besser als grep.

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

Ack hat nützliche Optionen

Ack ist besser als grep.

—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 ist besser als grep.

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

Ack ist besser als grep.

-Q verwenden, um sie nicht mit Escaping zu versehen..

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

Ack ist besser als grep.

Arbeiten mit Dateien

Eine Liste von Dateien mit einer bestimmten Erweiterung erhalten

ack -f --js

Ack ist besser als grep.

Suchen Sie alle js-Dateien, deren Name mit P* beginnt, und verwenden Sie die Option (-g).

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

Ack ist besser als grep.

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=dist

Fügen wir einen benutzerdefinierten Dateityp hinzu —vue.

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

Jetzt 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 -y

Installation

CentOS

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

Ubuntu

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 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

Erwerben Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster