Ack on parem kui grep

Tahan rääkida ühest otsingu utiliidist, mis teeb elu oluliselt lihtsamaks. Kui ma jõuan serverisse ja mul on midagi otsida, kontrollin kõigepealt, kas ack on installitud. See utiliit on suurepärane asendus grepile, samuti osaliselt findile ja wc-le. Miks mitte grep? Ackil on algselt meeldivamad seaded, inimloetavamad valikud, Perl regulaaravaldused ja konfigureerimissüsteem. Kui teile meeldib (või peate) otsima terminalis, siis tasub seda kindlasti proovida.

Põhiomadused

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

Saame kasutada lippu -w, et öelda utiliidile, et otsiks meie mustri juhtumeid, mis on ümbritsetud sõna piiridega (tühikute, kaldkriipsude jne).

ack -w mysql

Ack on parem kui grep

Ack toetab failitüüpide järgi otsimist. Näiteks otsime mooduli versiooni json-failides.

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

Ack on parem kui grep

Täpse faili tüüpide nimekirja saate vaadata, kasutades:

ack --help-types

Tihti peame arvestama, kui palju kordi fraas esineb logifailis, näiteks, et mõista, kui palju andmeid skript töötles.

Ack on parem kui grep
Arvutame, kui palju kordi process esineb failis test.log, ignoreerides registreid (-i).

Saame lugeda mitmeid esinemisi mitte lihtsalt ühes konkreetses failis, vaid grupis. Arendame edasi eelmist mysql sõna otsingut: loeme esinemiste arvu sõnades () *.js failides (—js), välistades failid, kus mitte midagi ei leitud (-h) ja liitma kokku.

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

Ack on parem kui grep

Lisaks saame kasutada täiendavat aruannet iga faili esinemiste arvu kohta, kasutades (õpivad)

ack --js -w -cl mysql

Ack on parem kui grep

Kui vajate otsinguks täiendavat konteksti, saate paluda ack'il
näidata leitud väljendi eelnevaid (-B) ja järgnevaid (-A) ridu. Selleks tuleb pärast valikut märkida, kui palju ridu on vaja 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 on vaja nii ühte kui teist, siis kasutage (-C)

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

Lisaks on olemas valik (-v), et otsingut ümber pöörata, st näidata ridu, kus antud mustrit ei ole.

Regulaaravaldus

Ack kasutab erinevalt grep'st Perliga ühilduvaid avaldusi.
Minu jaoks on see suur pluss, ei pea mäletama eraldi süntaksit regulaaravaldustele.

ack 'vars+adds+'

Ack on parem kui grep

Täpsem näide

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

Ack on parem kui grep

Tihti soovitakse tulemustes jätta vaid see, mis vastab mustrile. Siin aitab valik —output (-o)

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

Ack on parem kui grep

Lisaks saame ümmardatud sulgude abil eristada leitud osa ja viidata sellele väljundis muutuja $[grupi number] kaudu. Näiteks,

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

Ack on parem kui grep

Ack sisaldab kasulikke valikuid —range-start ja —range-end. Need aitavad, kui
andmed on salvestatud mitte ühes reas, vaid mitmerealisena.

Näiteks on meil sql koodiga fail

Ack on parem kui grep

Ekstraktime veergude nimetused. Bloki algus on rida, mis algab SELECT-ga, ja lõpp on rida, mis algab FROM-iga.

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

Ack on parem kui grep

Kui otsinguväljendis on erimärgid nagu punkt, ümmardatud sulud jne, siis nende vältimiseks ei pea neid esitama, võite kasutada valikut -Q.

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

Ack on parem kui grep

Failidega töötamine

Saada faili nimed kindla laiendiga

ack -f --js

Ack on parem kui grep

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

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

Ack on parem kui grep

Konfiguratsioon

Utiliit omab oma konfigureerimisfaili. Saadaval on nii globaalne konfiguratsioon kasutajale (~/.ackrc) kui ka kohalik konkreetse kausta jaoks (kaustas tuleb luua fail .ackrc).

Enamik valikuid, mis konfigureerimistesse kirjutatakse, saab käsitsi määrata ka kutsumise ajal. Vaatame mõned neist.

Ignoreeri kausta otsingu ajal

--ignore-dir=dist

Lisame kohandatud faili tüübi —vue.

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

Nüüd saab kasutada valikut —vue, et otsida failidest .vue. Näiteks: ack —vue App.
Samas saab määrata selle valiku jaoks laiendite nimekirja. Näiteks, siin kasutatakse —vue korral ka
.js faile.

Игнорировать файлы, например, минифицированные *.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 veebisaidilt

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

Redaktori pluginaid:

Kokkuvõte

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

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

Utiliit ack muudab terminalis otsimise mugavamaks ja paindlikumaks. Ja pipelini (ack -C 10 hello | ack world) abil saab luua võimsa andmete otsingu ja filtreerimise kombaini failisüsteemis ja failides endis.

Allikas: habr.com

Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster