Ack on parem kui grep

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 on parem kui grep

Ack toetab otsingut failitüüpide kaupa. Näiteks leiame mooduli versiooni json-failidest.

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

Ack on parem kui grep

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

ack --help-types

Tihti tuleb lugeda, kui sageli fraas logifailis esineb, näiteks, et mõista, kui palju andmeid skript on töötlenud.

Ack on parem kui grep
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

Ack on parem kui grep

Lisaks saame koostada põhjaliku aruanne igas failis esinevate sõnade arvu kohta (-l)

ack --js -w -cl mysql

Ack on parem kui grep

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/

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/

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+'

Ack on parem kui grep

Keerulisem näide

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

Ack on parem kui grep

Sageli tahaksin tulemustes jätta alles vaid selle, mis sobib mustriga. Siin aitab valik —output (-o)

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

Ack on parem kui grep

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+)]'

Ack on parem kui grep

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

Ack on parem kui grep

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

Ack on parem kui grep

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.

Ack on parem kui grep

Failidega töötamine

Saada failide loend kindla laiendiga

ack -f --js

Ack on parem kui grep

Leia kõik js failid, mille nimi algab P* - kasutades võimalust (-g).

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

Ack on parem kui grep

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=dist

Lisame kohandatud failitüübi —vue.

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

Nüü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 -y

Ubuntu

apt-get update -y && apt-get install ack-grep -y

Mac OS

brew update && brew install ack

Paigaldamine veebisaidilt

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

Redaktori pistikprogrammid:

Kokkuvõte

See ei ole kaugeltki kõik võimalused. Täielikku funktsioonide loendit saab vaadata, käivitades:

ack –-help
# või
ack --man

Töö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

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster