Ack este mai bun decât grep

Vreau să vă spun despre un utilitar de căutare care simplifică foarte mult viața. Când ajung la server și trebuie să caut ceva, primul lucru pe care îl fac este să verific dacă ack este instalat. Acest utilitar este un înlocuitor excelent pentru grep, precum și pentru find și wc într-o oarecare măsură. De ce nu grep? Ack are setări mai frumoase din cutie, opțiuni mai citite de om, regex perl și un sistem de configurare. Dacă vă place (trebuie) să căutați prin terminal, atunci cu siguranță ar trebui să îl încercați.

Caracteristici de bază

Ack este recursiv în mod implicit, iar scrierea mai puține opțiuni este întotdeauna o idee bună.

Putem folosi un steag -wpentru a spune utilitarului să caute o instanță a modelului nostru înconjurat de granițe de cuvinte (spații albe, bare oblice etc.).

ack -w mysql

Ack este mai bun decât grep

Ack acceptă căutarea după tipul de fișier. De exemplu, să găsim versiunea modulului în fișierele json.

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

Ack este mai bun decât grep

O listă completă a tipurilor de fișiere acceptate poate fi vizualizată folosind:

ack --help-types

Adesea trebuie să numărați de câte ori apare o frază într-un fișier jurnal, de exemplu, pentru a înțelege câte date a procesat scriptul.

Ack este mai bun decât grep
Numărăm de câte ori are loc procesul în fișierul test.log, fără a ține cont de cazurile (-i).

Putem număra aparițiile nu doar într-un anumit fișier, ci și într-un grup. Să finalizăm căutarea anterioară pentru cuvântul mysql: numărați numărul de apariții ale cuvintelor (-Cu) în fișierele *.js(--js), excluzând fișierele în care nu s-a găsit nimic (-h) și însumând rezultatul.

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

Ack este mai bun decât grep

În plus, putem obține un raport detaliat cu privire la numărul de apariții din fiecare fișier folosind (-l)

ack --js -w -cl mysql

Ack este mai bun decât grep

Dacă aveți nevoie de context suplimentar pentru căutarea dvs., puteți cere ack
arată rândurile până la (-B) si dupa (-A) a expresiei găsite. Pentru a face acest lucru, trebuie să specificați după opțiune numărul de linii care trebuie afișate.

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

Ack este mai bun decât grep

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

Ack este mai bun decât grep

Și dacă aveți nevoie de amândouă, atunci utilizați (-DIN)

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

Există și o opțiune (-v) pentru a inversa căutarea, adică pentru a afișa linii care nu conțin un model dat.

Expresie uzuala

Ack, spre deosebire de grep, folosește expresii compatibile cu Perl.
Pentru mine, acesta este un mare plus; nu trebuie să-mi amintesc o sintaxă separată pentru expresiile regulate.

ack 'vars+adds+'

Ack este mai bun decât grep

Exemplu mai complex

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

Ack este mai bun decât grep

De multe ori doriți să lăsați în rezultate doar ceea ce se potrivește cu șablonul. Opțiunea --output va ajuta aici (-o)

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

Ack este mai bun decât grep

În plus, folosind paranteze putem selecta partea găsită și o accesăm în ieșire prin variabila $[group number]. De exemplu,

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

Ack este mai bun decât grep

Ack are opțiuni utile --range-start и --range-end. Ei ajută când
Datele sunt stocate nu într-o singură linie, ci în formă de mai multe linii.

De exemplu, există un fișier cu cod sql

Ack este mai bun decât grep

Să extragem numele coloanelor. Începutul blocului va fi o linie care începe cu SELECT, iar sfârșitul va fi o linie care începe cu FROM.

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

Ack este mai bun decât grep

Dacă expresia de căutare conține caractere speciale, cum ar fi un punct, o paranteză și altele, atunci pentru a nu le scăpa folosind , puteți folosi opțiunea -Q.

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

Ack este mai bun decât grep

Lucrul cu fișiere

Obțineți o listă de fișiere cu o anumită extensie

ack -f --js

Ack este mai bun decât grep

Găsiți toate fișierele js al căror nume începe cu P* folosind opțiunea (-g).

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

Ack este mai bun decât grep

configurație

Utilitarul are propriul său fișier de configurare. Puteți avea atât o configurație globală pentru utilizator (~/.ackrc), cât și una locală pentru un anumit folder (trebuie să creați un fișier .ackrc în folder).

Cele mai multe dintre opțiunile care sunt scrise în configurații pot fi specificate manual atunci când sunt apelate. Să ne uităm la câteva dintre ele.

Ignorați folderul când căutați

--ignore-dir=dist

Să adăugăm un tip de fișier personalizat -vue.

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

Acum puteți folosi opțiunea --vue pentru a căuta fișiere .vue. De exemplu: ack --vue App.
Puteți specifica o listă de extensii pentru această opțiune. De exemplu, aici, când utilizați -vue, vor fi procesate următoarele:
fișiere .js.

Ignorați fișierele, de exemplu *.min.js minimizate

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

Instalare

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

Instalare de pe site

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

Pluginuri pentru editori:

Concluzie

Acestea nu sunt toate posibilitățile. Lista completă a funcțiilor poate fi vizualizată rulând:

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

Utilitarul ack vă permite să faceți căutarea în terminal mai comodă și mai flexibilă. Și folosind conducta (ack -C 10 salut | ack lume) puteți crea o combină puternică pentru căutarea și filtrarea datelor în sistemul de fișiere și în fișierele în sine.

Sursa: www.habr.com

Adauga un comentariu