Ack është më i mirë se grep

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 është më i mirë se grep

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

Ack është më i mirë se grep

Lista e plotë e llojeve të skedarëve të mbështetur mund të shikohet duke përdorur:

ack --help-types

Shpesh 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.

Ack është më i mirë se grep
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

Ack është më i mirë se grep

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

Ack është më i mirë se grep

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/

Ack është më i mirë se grep

# 2 строки после 
ack --js --column -A 2 "query.once('" . /lib/

Ack është më i mirë se grep

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

Ack është më i mirë se grep

Shembulli më i komplikuar

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

Ack është më i mirë se grep

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

Ack është më i mirë se grep

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 është më i mirë se grep

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

Ack është më i mirë se grep

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

Ack është më i mirë se grep

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.

Ack është më i mirë se grep

Punimi me skedarët

Merrni një listë skedari me një zgjatje të caktuar

ack -f --js

Ack është më i mirë se grep

Gjeni të gjitha skedarët js që fillojnë me P*, duke përdorur opsionin (-g).

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

Ack është më i mirë se grep

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

Shtojmë një lloj skedari të personalizuar —vue.

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

Tani 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 -y

Ubuntu

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

Mac OS

brew update && brew install ack

Instalimi nga faqja

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

Plugins 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 --man

Utilitari 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

Blini hosting të besueshëm për faqe interneti me mbrojtje nga DDoS, serverë VPS VDS 🔥 Blini hosting të besueshëm për faqe interneti me mbrojtje nga DDoS, serverë VPS VDS | ProHoster