Deshiroj të flas për një mjet kërkimi që e bën jetën shumë më të lehtë. Kur hyjë në një server dhe dua të kërkoj diçka, gjëja e parë që bëj është të kontrolloj nëse ack është instaluar. Ky mjet është një zëvendësim i shkëlqyer për grep, si dhe disi për find dhe wc. Pse jo grep? Ack ka konfigurime më të mira si bazë, opsione më të lexueshme për njeriun, shprehje të rregullt Perl dhe një sistem konfigurimi. Nëse ju pëlqen të kërkoni përmes terminalit, patjetër që duhet ta provoni atë.
Mundësitë bazë
Ack është rekurziv nga e drejta, dhe gjithmonë është mirë të shkruash më pak opsione.
Mund të përdorim flamurin -w, për t'i thënë mjetit të kërkojë një shembull të modelit tonë, i rrethuar nga kufijtë e fjalëve (karaktere hapësire, pjesëz dhe të tjerë).
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ë mbështetur të skedarëve mund të shikohet duke përdorur:
ack --help-typesShpesh na nevojitet të llogarisim sa herë shfaqet një frazë në një skedar log, për shembull, për të kuptuar sa shumë të dhëna ka përpunuar skripti.
![]()
Llogarisim sa herë process shfaqet në skedarin test.log, pa marrë parasysh regjistrin (-i).
Mund të llogarisim shfaqjet jo vetëm në një skedar të caktuar, por në një grup. Le të përmirësojmë kërkimin e mëparshëm për fjalën mysql: të llogarisim numrin e shfaqjeve të fjalëve (-c) në skedarët *.js (—js), duke përjashtuar skedarët ku nuk ka asgjë të gjetur (-h) dhe duke iu mbështetur rezultatit.
# выведем на экран все вхождения
ack --js -w mysql
# считаем общую сумму вхождений
ack --js -wch mysql
Për më tepër, mund të marrim një raport të detajuar për numrin e shfaqjeve në çdo skedar duke përdorur (-l)
ack --js -w -cl mysql
Nëse ju nevojitet kontekst shtesë për kërkimin, mund të kërkoni që ack
të tregojë rreshtat para (-B) dhe pas (-A) shprehjes të gjetur. Për këtë, duhet të specifikoni pas opsionit numrin e rreshtave që dëshironi të tregoni.
# 2 строки до
ack --js --column -B 2 "query.once('" ./lib/
# 2 строки после
ack --js --column -A 2 "query.once('" . /lib/
Dhe nëse nevojiten të dyja, përdorni (-C)
ack --js --column -C 2 "query.once('" ./lib/Ka edhe një opsion (-v) për të invertuar kërkimin, dmth për të treguar rreshtat ku nuk ka modelin e caktuar.
Shprehjet e rregullta
Ack, ndryshe nga grep, përdor shprehje të përputhshme me Perl.
Për mua, kjo është një avantazh i madh, sepse nuk duhet të mbaj mend një sintaksë të veçantë për shprehjet e rregullta.
ack 'vars+adds+'
Shembulli më i komplikuar
ack '*s+[vd+.d+.d+]'
Shpesh dëshirojmë të lëmë vetëm atë që përputhet me modelin në rezultatet. Këtu ndihmon opsioni —output (-o)
ack -o '*s+[vd+.d+.d+]'
Gjithashtu, me ndihmën e kllapave, mund të nxjerrim pjesën e gjetur dhe t'i referohemi asaj në daljen përmes variablës $[numri i grupit]. Për shembull,
ack --output='version is $1' '*s+[v(d+.d+.d+)]'
Ack ka disa opsione të dobishme —range-start dhe —range-end. Ato ndihmojnë kur
të dhënat nuk ruhen në një rresht, por në një format shumë-rresht.
Për shembull, ka një skedar me kod sql

Le të nxjerrim emrat e kolumnave. Fillimi i blokut do të jetë një rresht që fillon me SELECT, dhe përfundimi një rresht që fillon me FROM.
ack --range-start ^SELECT --range-end ^FROM 'td+.' ./test.sql
Nëse në shprehjen e kërkimit përfshihen simbolet e veçantë si pika, kllapa e përparme dhe të tjerë, atëherë për të mos i escapuar ato me , mund të përdorim opsionin -Q.
# Поиск с экранированием
ack --json 'mysql.'
# Поиск без экранирования
ack --json -Q mysql.
Puna me skedarët
Merrni një listë skedarësh me një zgjatje të caktuar
ack -f --js
Gjeni të gjitha skedarët js, emri i të cilëve fillon me P*, duke përdorur opsionin (-g).
ack -g --js '/Pa.+.js$'
Konfigurimi
Ky mjet ka skedarin e tij të konfigurimit. Mund të kemi si një konfigurim global për përdoruesin (~/.ackrc), ashtu edhe një lokal për një dosje të caktuar (duhet të krijosh një skedari .ackrc në dosje).
Shumica e opsioneve që shkruhen në konfigurime mund të shkruhen dorezi kur thirren. Le të shqyrtojmë disa prej tyre.
Injoroni dosjen 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ë këtë rast, mund të specifikoni një listë zgjatjesh për këtë opsion. Për shembull, këtu kur përdoret —vue, skedarët .js gjithashtu do të përpunohen. --ignore-file=match:/.min.js$/
Игнорировать файлы, например, минифицированные *.min.js
yum update -y && yum install ack -yInstalimi
CentOS
apt-get update -y && apt-get install ack-grep -yUbuntu
Mac OSbrew update && brew install ack
Instalimi nga faqjacurl https://beyondgrep.com/ack-v3.3.1 > ~/bin/ack && chmod 0755 ~/bin/ack
Plugins për redaktuesit:VSCode
Përfundimi
ack –-help # ose ack --man
Mjeti ack lejon të bëni kërkimin në terminal më të rehatshëm dhe fleksibël. Dhe me anë të pipeline (ack -C 10 hello | ack world) mund të krijoni një kombinat të fuqishëm për kërkimin dhe filtrimin e të dhënave në sistemin e skedarëve dhe në vetë skedarët.Deshiroj të flas për një mjet kërkimi që e bën jetën shumë më të lehtë. Kur hyjë në një server dhe dua të kërkoj diçka, gjëja e parë që bëj është të kontrolloj nëse ack është instaluar. Ky mjet është një zëvendësim i shkëlqyer për grep, si dhe disi për find dhe wc. Pse jo grep? Ack ka konfigurime më të mira si bazë, opsione më të lexueshme për njeriun.
Burimi: habr.com
