Ack és millor que grep

Vull parlar-vos d'una utilitat de cerca que simplifica molt la vida. Quan arribo al servidor i necessito buscar alguna cosa, el primer que faig és comprovar si ack està instal·lat. Aquesta utilitat és un excel·lent substitut de grep, així com de find i wc fins a cert punt. Per què no grep? Ack té una configuració més agradable, opcions més llegibles pels humans, regex perl i un sistema de configuració. Si t'agrada (has de) cercar a través del terminal, definitivament hauries de provar-ho.

Característiques bàsiques

Ack és recursiu per defecte, i escriure menys opcions sempre és una bona idea.

Podem utilitzar una bandera -wdir-li a la utilitat que busqui una instància del nostre patró envoltat de límits de paraules (espai en blanc, barres inclinades, etc.).

ack -w mysql

Ack és millor que grep

Ack admet la cerca per tipus de fitxer. Per exemple, busquem la versió del mòdul als fitxers json.

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

Ack és millor que grep

Es pot veure una llista completa dels tipus de fitxers compatibles amb:

ack --help-types

Sovint cal comptar quantes vegades apareix una frase en un fitxer de registre, per exemple, per entendre quantes dades ha processat l'script.

Ack és millor que grep
Comptem quantes vegades es produeix el procés al fitxer test.log, sense tenir en compte les majúscules i minúscules (-i).

Podem comptar les ocurrències no només en un fitxer específic, sinó en un grup. Finalitzem la cerca anterior de la paraula mysql: compta el nombre d'ocurrències de paraules (-de) als fitxers *.js (--js), excloent els fitxers en què no s'ha trobat res (-h) i resumint el resultat.

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

Ack és millor que grep

A més, podem obtenir un informe detallat sobre el nombre d'ocurrències a cada fitxer mitjançant (-l)

ack --js -w -cl mysql

Ack és millor que grep

Si necessiteu context addicional per a la vostra cerca, podeu demanar ack
mostrar línies fins a (-B) i després (-A) de l'expressió trobada. Per fer-ho, heu d'especificar després de l'opció el nombre de línies que cal mostrar.

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

Ack és millor que grep

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

Ack és millor que grep

I si necessiteu tots dos, feu servir (-AMB)

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

També hi ha una opció (-v) per invertir la cerca, és a dir, mostrar línies que no contenen un patró determinat.

Expressió normal

Ack, a diferència de grep, utilitza expressions compatibles amb Perl.
Per a mi, això és un gran avantatge; no he de recordar una sintaxi separada per a les expressions regulars.

ack 'vars+adds+'

Ack és millor que grep

Exemple més complex

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

Ack és millor que grep

Sovint, voleu deixar als resultats només el que coincideix amb la plantilla. L'opció --output ajudarà aquí (-o)

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

Ack és millor que grep

A més, mitjançant parèntesis podem seleccionar la part trobada i accedir-hi a la sortida mitjançant la variable $[número de grup]. Per exemple,

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

Ack és millor que grep

Ack té opcions útils --range-start и --extrem de rang. Ajuden quan
Les dades no s'emmagatzemen en una línia, sinó en forma de diverses línies.

Per exemple, hi ha un fitxer amb codi sql

Ack és millor que grep

Extreurem els noms de les columnes. L'inici del bloc serà una línia que comença per SELECT, i el final serà una línia que comença per FROM.

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

Ack és millor que grep

Si l'expressió de cerca conté caràcters especials com ara un punt, un parèntesi i altres, per no escapar-los amb , podeu utilitzar l'opció -Q.

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

Ack és millor que grep

Treballar amb fitxers

Obteniu una llista de fitxers amb una extensió específica

ack -f --js

Ack és millor que grep

Trobeu tots els fitxers js el nom dels quals comenci per P* utilitzant l'opció (-g).

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

Ack és millor que grep

Configuració

La utilitat té el seu propi fitxer de configuració. Podeu tenir tant una configuració global per a l'usuari (~/.ackrc) com una de local per a una carpeta específica (cal crear un fitxer .ackrc a la carpeta).

La majoria de les opcions que s'escriuen a les configuracions es poden especificar manualment quan es crida. Vegem-ne alguns.

Ignora la carpeta en cercar

--ignore-dir=dist

Afegim un tipus de fitxer personalitzat -vue.

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

Ara podeu utilitzar l'opció --vue per cercar fitxers .vue. Per exemple: aplicació ack --vue.
Podeu especificar una llista d'extensions per a aquesta opció. Per exemple, aquí, quan utilitzeu -vue, es processarà el següent:
fitxers .js.

Ignoreu els fitxers, per exemple, *.min.js minificat

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

Instal · lació

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

Instal·lació des del lloc

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

Connectors per a editors:

Conclusió

Aquestes no són totes les possibilitats. La llista completa de funcions es pot veure executant:

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

La utilitat ack us permet fer la cerca al terminal més còmoda i flexible. I utilitzant pipeline (ack -C 10 hola | ack món) podeu crear una combinació potent per cercar i filtrar dades al sistema de fitxers i als mateixos fitxers.

Font: www.habr.com

Afegeix comentari