Ack ass besser wéi grep

Ech wëll Iech iwwer ee Sich-Utility soen dat d'Liewen immens vereinfacht. Wann ech op de Server kommen an ech muss no eppes sichen, ass dat éischt wat ech maachen ass ze kontrolléieren ob ack installéiert ass. Dëst Utility ass en exzellenten Ersatz fir grep, souwéi fannen a wc zu engem gewësse Mooss. Firwat net grep? Ack huet méi schéin Astellungen aus der Këscht, méi mënschlech liesbar Optiounen, Perl Regex an e Configuratiounssystem. Wann Dir gär (muss) duerch den Terminal sichen, da sollt Dir et definitiv probéieren.

Basis Fonctiounen

Ack ass rekursiv par défaut, a manner Optiounen ze schreiwen ass ëmmer eng gutt Iddi.

Mir kënnen e Fändel benotzen -wfir den Utility ze soen fir no engem Beispill vun eisem Muster ze sichen, ëmgi vu Wuertgrenzen (Whitespace, Slashes, etc.).

ack -w mysql

Ack ass besser wéi grep

Ack ënnerstëtzt Sich no Dateityp. Zum Beispill, loosst eis d'Modulversioun an json Dateien fannen.

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

Ack ass besser wéi grep

Eng komplett Lëscht vun ënnerstëtzte Dateitypen ka gekuckt ginn mat:

ack --help-types

Dacks musst Dir zielen wéi oft e Saz an enger Logdatei erschéngt, zum Beispill, fir ze verstoen wéi vill Daten de Skript veraarbecht huet.

Ack ass besser wéi grep
Mir zielen wéivill Mol de Prozess an der test.log Datei geschitt, net berücksichtegt de Fall (-i).

Mir kënnen Optriede zielen net nëmmen an engem spezifesche Fichier, mee an enger Grupp. Loosst eis déi vireg Sich no dem Wuert mysql finaliséieren: zielt d'Zuel vun den Optriede vu Wierder () an *.js Dateien(--js), ausser Dateien an deenen näischt fonnt gouf (-h) a resuméieren d'Resultat.

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

Ack ass besser wéi grep

Zousätzlech kënne mir en detailléierte Bericht iwwer d'Zuel vun Optriede an all Datei kréien andeems Dir (-l)

ack --js -w -cl mysql

Ack ass besser wéi grep

Wann Dir zousätzlech Kontext fir Är Sich braucht, kënnt Dir ack froen
weisen Linnen bis (-B) an no (-A) vum fonnten Ausdrock. Fir dëst ze maachen, musst Dir no der Optioun d'Zuel vun den Zeilen spezifizéieren déi gewise musse ginn.

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

Ack ass besser wéi grep

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

Ack ass besser wéi grep

A wann Dir béid braucht, da benotzt (-MAT)

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

Et gëtt och eng Optioun (-v) fir d'Sich ëmzedréinen, dh Linnen ze weisen déi kee bestëmmte Muster enthalen.

Regelméisseg Ausdrock

Ack, am Géigesaz zu grep, benotzt Perl-kompatibel Ausdréck.
Fir mech ass dëst e grousse Plus; Ech muss net eng separat Syntax fir reegelméisseg Ausdréck erënneren.

ack 'vars+adds+'

Ack ass besser wéi grep

Méi komplex Beispill

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

Ack ass besser wéi grep

Dacks wëllt Dir an de Resultater nëmmen dat hannerloossen wat d'Schabloun entsprécht. D' --Output Optioun hëlleft hei (-o)

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

Ack ass besser wéi grep

Zousätzlech, mat Klammeren kënne mir de fonnten Deel auswielen an et an der Ausgab duerch d'$[Gruppnummer] Variabel zougräifen. Zum Beispill,

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

Ack ass besser wéi grep

Ack huet nëtzlech Optiounen --Gamme-Start и --range-end. Si hëllefen wann
D'Donnéeë ginn net an enger Zeil gespäichert, awer a Multi-Linn Form.

Zum Beispill gëtt et eng Datei mat sql Code

Ack ass besser wéi grep

Loosst eis d'Kolonnnimm extrahéieren. Den Ufank vum Block wäert eng Linn sinn, déi mat SELECT ufänkt, an d'Enn wäert eng Linn sinn, déi mat FROM ufänkt.

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

Ack ass besser wéi grep

Wann de Sichausdrock speziell Zeechen enthält wéi eng Period, eng Klammern, an anerer, da kënnt Dir d'Optioun benotzen fir se net ze entkommen -Q.

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

Ack ass besser wéi grep

Schafft mat Dateien

Kritt eng Lëscht vu Dateien mat enger spezifescher Extensioun

ack -f --js

Ack ass besser wéi grep

Fannt all js Dateien deenen hiren Numm mat P * fänkt mat der Optioun (-g).

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

Ack ass besser wéi grep

Configuratioun

D'Utility huet seng eege Configuratiounsdatei. Dir kënnt souwuel eng global Configuratioun fir de Benotzer hunn (~/.ackrc) an eng lokal fir e spezifeschen Dossier (Dir musst eng .ackrc Datei am Dossier erstellen).

Déi meescht vun den Optiounen, déi an de Konfiguratioune geschriwwe sinn, kënnen manuell spezifizéiert ginn wann se genannt ginn. Loosst eis e puer vun hinnen kucken.

Ignoréieren Dossier wann Dir sicht

--ignore-dir=dist

Loosst eis e personaliséierte Dateityp addéieren -vue.

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

Elo kënnt Dir d' --vue Optioun benotze fir Dateien ze sichen .vue. Zum Beispill: ack --vue App.
Dir kënnt eng Lëscht vun Extensiounen fir dës Optioun uginn. Zum Beispill, hei, wann Dir -vue benotzt, gëtt déi folgend veraarbecht:
.js Dateien.

Ignoréieren Dateien, zum Beispill minifizéiert *.min.js

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

Kader

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

Installatioun vum Site

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

Plugins fir Redaktoren:

Konklusioun

Dëst sinn net all d'Méiglechkeeten. Déi komplett Lëscht vu Funktiounen kann gekuckt ginn andeems Dir leeft:

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

Den ack Utility erlaabt Iech d'Sich am Terminal méi bequem a flexibel ze maachen. A benotzt Pipeline (ack -C 10 Moien | ack Welt) Dir kënnt eng mächteg Kombinatioun erstellen fir Daten am Dateiesystem an an de Dateien selwer ze sichen an ze filteren.

Source: will.com

Setzt e Commentaire