Soovin rääkida ühest otsingu utiliidist, mis teeb elu palju lihtsamaks. Kui jõuan serverisse ja pean midagi otsima, siis kontrollin kõigepealt, kas ack on paigaldatud. See utiliit on suurepärane asendus grepile ja osaliselt ka findile ja wc-le. Miks mitte grep? Ack'il on vaikimisi mugavamad seaded, paremini loetavad valikud, Perl regulaaravaldised ja konfiguratsioonisüsteem. Kui teile meeldib (või peate) otsima terminali kaudu, siis tasub seda kindlasti proovida.
Põhifunktsioonid
Ack on vaikimisi rekursiivne ja alati on hea kirjutada vähem valikuid.
Me võime kasutada lippu -w, et öelda utiliidile, et otsida meie mustandi eksemplari, mis on ümbritsetud sõnapiiridest (valgete märkide, kaldkriipsu jne).
ack -w mysql
Ack toetab otsingut failitüüpide kaupa. Näiteks leiame mooduli versiooni json-failidest.
ack --json '"version":s+"d+.d+.d+"'
Toetatud failitüüpide täielikku loetelu saab vaadata kasutades:
ack --help-typesTihti tuleb lugeda, kui sageli fraas logifailis esineb, näiteks, et mõista, kui palju andmeid skript on töötlenud.
![]()
Loeme, kui sageli process esineb failis test.log, suurust arvestamata (-i).
Me saame arvestada sisestusi mitte ainult ühes konkreetses failis, vaid rühmas. Täiendame eelnevat mysql sõna otsingut: loeme sõnade esinemiste arvu (-s) *.js failides (—js), välja arvatud failid, kus midagi ei leitud (-h) ja liidame kokku tulemuse.
# выведем на экран все вхождения
ack --js -w mysql
# считаем общую сумму вхождений
ack --js -wch mysql
Lisaks saame koostada põhjaliku aruanne igas failis esinevate sõnade arvu kohta (-l)
ack --js -w -cl mysql
Kui vajate täiendavat konteksti otsingu jaoks, võite küsida, et ack
näitaks read enne (-B) ja pärast (-A) leitud väljendit. Selleks tuleb pärast valikut näidata ridade arvu, mida on vaja kuvada.
# 2 строки до
ack --js --column -B 2 "query.once('" ./lib/
# 2 строки после
ack --js --column -A 2 "query.once('" . /lib/
Ja kui vajate mõlemat, siis kasutage (-C)
ack --js --column -C 2 "query.once('" ./lib/Samuti on olemas valik (-v) otsingu pööramiseks, st kuvada read, kus määratud mustrit ei ole.
Regulaarsed väljendid
Ack, erinevalt grepist, kasutab Perl-ühtseid väljendeid.
Minu jaoks on see suur pluss, ei pea eraldi süntaksit regulaarselt meeles pidama.
ack 'vars+adds+'
Keerulisem näide
ack '*s+[vd+.d+.d+]'
Sageli tahaksin tulemustes jätta alles vaid selle, mis sobib mustriga. Siin aitab valik —output (-o)
ack -o '*s+[vd+.d+.d+]'
Lisaks sellele saame kasutada ümarate sulgude abil välja valitud osa ja pöörduda selle poole väljundis kasutades muutujat $[number of group]. Näiteks,
ack --output='versioon on $1' '*s+[v(d+.d+.d+)]'
Ackil on kasulikud valikud —range-start ja —range-end. Need aitavad, kui
andmed on salvestatud mitte ühele reale, vaid mitmerealisena.
Näiteks on fail SQL koodiga

Tõstame välja veergude nimed. Ploki alguseks on rida, mis algab sõnaga SELECT, ja lõpuks rida, mis algab sõnaga FROM.
ack --range-start ^SELECT --range-end ^FROM 'td+.' ./test.sql
Kui otsingumõistes on osalised erimärgid nagu punkt, ümar sulg ja teised, siis et neid mitte karistada, saab kasutada valikut -Q.
# Поиск с экранированием
ack --json 'mysql.'
# Поиск без экранирования
ack --json -Q mysql.
Failidega töötamine
Saada failide loend kindla laiendiga
ack -f --js
Leia kõik js failid, mille nimi algab P* - kasutades võimalust (-g).
ack -g --js '/Pa.+.js$'
Konfiguratsioon
Utiliidil on oma konfigureerimisfail. Saame omada nii globaalset konfi kasutaja jaoks (~/.ackrc) kui ka kohalikku konkreetse kausta jaoks (kaustas tuleb luua fail .ackrc).
Enamik valikuid, mis on konfiguraatides määratletud, saab käsitsi määrata ka kutse ajal. Uurime paar neist.
Ignoreeri kausta otsimisel
--ignore-dir=distLisame kohandatud failitüübi —vue.
--type-add=vue:ext:js,vueNüüd saab kasutada valikut —vue, et otsida failides .vue. Näiteks: ack —vue App.
Samas on võimalik määrata selle valiku jaoks laiendite loend. Näiteks siin, kui kasutada —vue, töödeldakse ka .js faile.
Игнорировать файлы, например, минифицированные *.min.js
--ignore-file=match:/.min.js$/Installimine
CentOS
yum update -y && yum install ack -yUbuntu
apt-get update -y && apt-get install ack-grep -yMac OS
brew update && brew install ackPaigaldamine veebisaidilt
curl https://beyondgrep.com/ack-v3.3.1 > ~/bin/ack && chmod 0755 ~/bin/ackRedaktori pistikprogrammid:
Kokkuvõte
See ei ole kaugeltki kõik võimalused. Täielikku funktsioonide loendit saab vaadata, käivitades:
ack –-help
# või
ack --manTööriist ack muudab terminalis otsimise mugavaks ja paindlikuks. Ja pipeline'i abil (ack -C 10 hello | ack world) saab luua võimsa kombaini andmete otsimiseks ja filtreerimiseks failisüsteemis ja failides endis.
Allikas: habr.com
