Dua të flas për një mjet kërkimi, i cili e thjeshton shumë jetën. Kur hy në një server dhe kam për të kërkuar diçka, hera e parë që shoh është nëse është instaluar ack. Ky mjet është një zëvendësim i shkëlqyer për grep, dhe në njëfarë mënyre edhe për find dhe wc. Pse jo grep? Ack ka cilësime më të këndshme nga kutia, opsione më të lexueshme, shprehje të rregullt perle dhe një sistem konfigurimi. Nëse ju pëlqen (doni) të kërkoni përmes terminalit, patjetër që duhet ta provoni.
Funksionalitetet bazë
Ack në mënyrë të parazgjedhur është rekurziv, dhe gjithmonë është mirë të shkruani më pak opsione.
Mund të përdorim flagun -w, për t'i thënë mjetit të kërkojë një ekzemplar të modelit tonë, i rrethuar nga kufij fjalësh (simbolet e boshllëkut, ndarësi etj.).
ack -w mysql
Ack mbështet kërkimin sipas llojit të skedarëve. Për shembull, le të gjejmë versionin e modulit në skedarët json.
ack --json '"version":s+"d+.d+.d+"'
Lista e plotë e llojeve të skedarëve të mbështetur mund të shikohet duke përdorur:
ack --help-typesShpesh duhet të llogarisim sa herë shfaqet një frazë në një skedar log, për shembull, për të kuptuar sa të dhëna ka trajtuar skripta.
![]()
Llogarisim sa herë shfaqet process në skedarin test.log, pa marrë parasysh rastësinë (-i).
Mund të llogarisim rastet jo vetëm në një skedar të caktuar, por në një grup. Do ta zhvillojmë kërkimin e mëparshëm të fjalës mysql: do të llogarisim numrin e rasteve të fjalëve (-c) në *.js skedarët (—js), duke përjashtuar skedarët në të cilët nuk është gjetur asgjë (-h) dhe duke e shumuar rezultatin.
# выведем на экран все вхождения
ack --js -w mysql
# считаем общую сумму вхождений
ack --js -wch mysql
Për më tepër, mund të marrim një raport të zgjatur mbi numrin e rasteve në çdo skedar duke përdorur (--selector)
ack --js -w -cl mysql
Nëse ju nevojitet kontekst shtesë për kërkimin, mund t'i kërkoni ack
të tregojë rreshtat para (-B) dhe pas (-A) shprehjes së gjetur. Për këtë, duhet të specifikoni pas opsionit numrin e rreshtave që duhet të tregohen.
# 2 строки до
ack --js --column -B 2 "query.once('" ./lib/
# 2 строки после
ack --js --column -A 2 "query.once('" . /lib/
Dhe nëse nevojiten të dyja, atëherë përdorni (-C)
ack --js --column -C 2 "query.once('" .\/lib\/Ka gjithashtu një opsion (-v) për të invertuar kërkimin, dmth të tregoni rreshtat në të cilat nuk ka model të caktuar.
Shprehjet e rregullta
Ack, ndryshe nga grep, përdor shprehje të përputhshme me Perl.
Për mua, kjo është një përfitim i madh, nuk është e nevojshme të mbaj mend një sintaksë tjetër për shprehjet e rregullta.
ack 'vars+adds+'
Shembulli më i komplikuar
ack '*s+[vd+.d+.d+]'
Shpesh dëshiroj të lë vetëm atë që përputhet me modelin në rezultatet. Këtu ndihmon opsioni —output (-o)
ack -o '*s+[vd+.d+.d+]'
Përveç kësaj, me ndihmën e thonjëzave të rrethit mund të nxjerrim pjesën e gjetur dhe t'i referohemi asaj në output përmes variablës $[numri i grupit]. Për shembull,
ack --output='version is $1' '*s+[v(d+.d+.d+)]'
Ack ka opsione të dobishme --range-start dhe --range-end. Ato ndihmojnë kur
të dhënat ruhen jo në një rresht, por në një format shumë-rresht.
Për shembull, ka një skedar me kod sql

Të nxjerrim emrat e kolonave. Fillimi i bllokut do të jetë një rresht që fillon me SELECT, dhe fundi një rresht që fillon me FROM.
ack --range-start ^SELECT --range-end ^FROM 'td+.' ./test.sql
Nëse në shprehjen e kërkimit marrin pjesë simbole speciale si pika, thonjëza të rrethit dhe të tjera, për t'i shmangur ato nga ekranuar me , mund të përdorim opsionin -Q.
# Поиск с экранированием
ack --json 'mysql.'
# Поиск без экранирования
ack --json -Q mysql.
Punimi me skedarët
Merrni një listë skedari me një zgjatje të caktuar
ack -f --js
Gjeni të gjitha skedarët js që fillojnë me P*, duke përdorur opsionin (-g).
ack -g --js '/Pa.+.js$'
Konfigurimi
Utilitari ka skedarin e tij të konfigurimit. Mund të ketë një konfigurim global për përdoruesin (~/.ackrc) dhe një lokal për një dosje të caktuar (në dosje duhet të krijoni skedarin .ackrc).
Shumica e opsioneve që shkruhen në konfigurime mund të shkruhen gjithashtu manualisht gjatë thirrjes. Le t'i shqyrtojmë disa prej tyre.
Injoroni folderin gjatë kërkimit
--ignore-dir=distShtojmë një lloj skedari të personalizuar —vue.
--type-add=vue:ext:js,vueTani mund të përdorim opsionin —vue për të kërkuar në skedarët .vue. Për shembull: ack —vue App.
Në të njëjtën kohë mund të specifikoni një listë zgjatjesh për këtë opsion. Për shembull, këtu me përdorimin —vue do të përpunohen gjithashtu .js skedarët.
Игнорировать файлы, например, минифицированные *.min.js
--ignore-file=match:/\.min.js$/Instalimi
CentOS
yum update -y && yum install ack -yUbuntu
apt-get update -y && apt-get install ack-grep -yMac OS
brew update && brew install ackInstalimi nga faqja
curl https://beyondgrep.com/ack-v3.3.1 > ~/bin/ack && chmod 0755 ~/bin/ackPlugins për redaktorët:
Përfundim
Kjo është vetëm një pjesë e mundësive. Lista e plotë e funksioneve mund të shihet duke ekzekutuar:
ack --help
# ose
ack --manUtilitari ack lejon të bëni kërkimin në terminal më të lehtë dhe më fleksibël. Dhe me ndihmën e pipeline (ack -C 10 hello | ack world) mund të krijoni një kombajn të fuqishëm për kërkimin dhe filtrimin e të dhënave në sistemin e skedarëve dhe në vetë skedarët.
Burimi: habr.com
