Ack on parem kui grep

Tahan teile rääkida ühest otsinguutiliidist, mis elu oluliselt lihtsustab. Kui jõuan serverisse ja pean midagi otsima, kontrollin esimese asjana, kas ack on installitud. See utiliit on suurepärane asendus grepile, samuti mingil määral find ja wc. Miks mitte grep? Ackil on karbist väljas ilusamad sätted, inimloetavad valikud, perl regex ja konfiguratsioonisüsteem. Kui sulle meeldib (peab) läbi terminali otsida, siis tasub kindlasti proovida.

Põhifunktsioonid

Ack on vaikimisi rekursiivne ja vähemate valikute kirjutamine on alati hea mõte.

Võime kasutada lippu -wkäskida utiliidil otsida meie mustri näidet, mis on ümbritsetud sõnapiiridega (tühik, kaldkriipsud jne).

ack -w mysql

Ack on parem kui grep

Ack toetab failitüübi järgi otsimist. Näiteks leiame mooduli versiooni json-failidest.

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

Ack on parem kui grep

Toetatud failitüüpide täielikku loendit saab vaadata kasutades:

ack --help-types

Sageli peate näiteks loendama, mitu korda mõni fraas logifailis ilmub, et mõista, kui palju andmeid skript töötles.

Ack on parem kui grep
Loendame, mitu korda protsessi toimub failis test.log, arvestamata juhtumit (-i).

Me ei saa loendada esinemisi mitte ainult ühes konkreetses failis, vaid rühmas. Lõpetagem sõna mysql eelmine otsing: loendage sõnade esinemiste arv (-st) *.js-failides(--js), välja arvatud failid, millest midagi ei leitud (-h) ja tulemuse kokkuvõtmist.

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

Ack on parem kui grep

Lisaks saame üksikasjaliku aruande iga faili esinemiste arvu kohta, kasutades (-l)

ack --js -w -cl mysql

Ack on parem kui grep

Kui vajate otsingu jaoks täiendavat konteksti, võite küsida ack
näita ridu kuni (-B) ja pärast (-A) leitud avaldisest. Selleks tuleb pärast suvandit määrata ridade arv, mida tuleb näidata.

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

Ack on parem kui grep

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

Ack on parem kui grep

Ja kui vajate mõlemat, siis kasutage (-C)

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

On ka võimalus (-v) otsingu ümberpööramiseks, st joonte kuvamiseks, mis ei sisalda antud mustrit.

Regulaaravaldis

Erinevalt grepist kasutab Ack Perliga ühilduvaid väljendeid.
Minu jaoks on see suur pluss; ma ei pea regulaaravaldiste jaoks eraldi süntaksit meeles pidama.

ack 'vars+adds+'

Ack on parem kui grep

Keerulisem näide

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

Ack on parem kui grep

Sageli soovite tulemustesse jätta ainult selle, mis mallile sobib. Siin aitab suvand --output (-o)

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

Ack on parem kui grep

Lisaks saame sulgude abil valida leitud osa ja sellele väljundis juurde pääseda muutuja $[grupi number] kaudu. Näiteks,

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

Ack on parem kui grep

Ackil on kasulikke valikuid --vahemiku algus и --vahemiku lõpp. Nad aitavad, kui
Andmeid ei salvestata ühel real, vaid mitmerealisel kujul.

Näiteks on sql-koodiga fail

Ack on parem kui grep

Eraldame veergude nimed. Ploki algus on rida, mis algab tähega SELECT ja lõpp on rida, mis algab tähega FROM.

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

Ack on parem kui grep

Kui otsinguavaldis sisaldab erimärke, nagu punkt, sulud ja muud, saate kasutada suvandit, et neid mitte vältida kasutades -Q.

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

Ack on parem kui grep

Töötamine failidega

Hankige konkreetse laiendiga failide loend

ack -f --js

Ack on parem kui grep

Otsige üles kõik js-failid, mille nimi algab tähega P*, kasutades suvandit (-g).

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

Ack on parem kui grep

Konfiguratsioon

Utiliidil on oma konfiguratsioonifail. Teil võib olla nii kasutaja globaalne konfiguratsioon (~/.ackrc) kui ka kohalik konfiguratsioon konkreetse kausta jaoks (peate kausta looma .ackrc-faili).

Enamikku konfiguratsioonides kirjutatud valikuid saab kutsumisel käsitsi määrata. Vaatame mõnda neist.

Ignoreeri otsimisel kausta

--ignore-dir=dist

Lisame kohandatud failitüübi -vue.

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

Nüüd saate failide otsimiseks kasutada suvandit --vue .vue. Näiteks: ack --vue rakendus.
Selle valiku jaoks saate määrata laienduste loendi. Näiteks siin, kui kasutate -vue, töödeldakse järgmist:
.js failid.

Ignoreeri faile, näiteks minimeeritud *.min.js

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

Paigaldamine

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

Paigaldamine saidilt

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

Redigeerijate pluginad:

Järeldus

Need pole veel kõik võimalused. Funktsioonide täielikku loendit saab vaadata käivitades:

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

Ack-utiliit võimaldab muuta terminalis otsimise mugavamaks ja paindlikumaks. Ja torujuhtme kasutamine (ack -C 10 tere | ack maailm) saate luua võimsa kombaini andmete otsimiseks ja filtreerimiseks failisüsteemis ja failides endis.

Allikas: www.habr.com

Lisa kommentaar