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 toetab failitüüpide järgi otsimist. Näiteks otsime mooduli versiooni json-failides.
ack --json '"version":s+"d+.d+.d+"'
Täpse faili tüüpide nimekirja saate vaadata, kasutades:
ack --help-typesTihti peame arvestama, kui palju kordi fraas esineb logifailis, näiteks, et mõista, kui palju andmeid skript töötles.
![]()
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
Lisaks saame kasutada täiendavat aruannet iga faili esinemiste arvu kohta, kasutades (õpivad)
ack --js -w -cl mysql
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/
# 2 строки после
ack --js --column -A 2 "query.once('" . /lib/
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+'
Täpsem näide
ack '*s+[vd+.d+.d+]'
Tihti soovitakse tulemustes jätta vaid see, mis vastab mustrile. Siin aitab valik —output (-o)
ack -o '*s+[vd+.d+.d+]'
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 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

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
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.
Failidega töötamine
Saada faili nimed kindla laiendiga
ack -f --js
Leia kõik js failid, mille nimi algab P*-ga, kasutades valikut (-g).
ack -g --js '/Pa.+.js$'
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=distLisame kohandatud faili tüübi —vue.
--type-add=vue:ext:js,vueNüü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 -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 pluginaid:
Kokkuvõte
See ei ole kaugeltki kõik võimalused. Täielikku funktsioonide loendit saab vaadata, käivitades:
ack –-help
# või
ack --manUtiliit 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
