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 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+"'
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.
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
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
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/
# 2 строки после
ack --js --column -A 2 "query.once('" . /lib/
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+'
Exemple més complex
ack '*s+[vd+.d+.d+]'
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+]'
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 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
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
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.
Treballar amb fitxers
Obteniu una llista de fitxers amb una extensió específica
ack -f --js
Trobeu tots els fitxers js el nom dels quals comenci per P* utilitzant l'opció (-g).
ack -g --js '/Pa.+.js$'
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