Unë dua t'ju tregoj për një mjet kërkimi që thjeshton shumë jetën. Kur shkoj te serveri dhe më duhet 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ëlqyeshëm për grep, si dhe find and wc në një farë mase. Pse jo grep? Ack ka cilësime më të mira jashtë kutisë, më shumë opsione të lexueshme nga njeriu, perl regex dhe një sistem konfigurimi. Nëse ju pëlqen (duhet) të kërkoni nëpër terminal, atëherë duhet ta provoni patjetër.
Karakteristikat themelore
Ack është rekursiv si parazgjedhje, dhe shkrimi i më pak opsioneve është gjithmonë një ide e mirë.
Mund të përdorim një flamur -wpër t'i thënë programit që të kërkojë një shembull të modelit tonë të rrethuar nga kufijtë e fjalëve (hapësira e bardhë, prerje, etj.).
ack -w mysql
Ack mbështet kërkimin sipas llojit të skedarit. Për shembull, le të gjejmë versionin e modulit në skedarët json.
ack --json '"version":s+"d+.d+.d+"'
Një listë e plotë e llojeve të skedarëve të mbështetur mund të shihet duke përdorur:
ack --help-types
Shpesh ju duhet të numëroni sa herë shfaqet një frazë në një skedar log, për shembull, për të kuptuar se sa të dhëna ka përpunuar skripti.
Ne llogarisim sa herë ndodh procesi në skedarin test.log, duke mos marrë parasysh rastin (-i).
Ne mund të numërojmë dukuritë jo vetëm në një skedar specifik, por në një grup. Le të finalizojmë kërkimin e mëparshëm për fjalën mysql: numëroni numrin e shfaqjes së fjalëve (-me) në skedarët *.js(--js), duke përjashtuar skedarët në të cilët nuk u gjet asgjë (-h) dhe duke përmbledhur rezultatin.
# выведем на экран все вхождения
ack --js -w mysql
# считаем общую сумму вхождений
ack --js -wch mysql
Përveç kësaj, ne mund të marrim një raport të detajuar mbi numrin e dukurive në çdo skedar duke përdorur (-l)
ack --js -w -cl mysql
Nëse keni nevojë për kontekst shtesë për kërkimin tuaj, mund të kërkoni të pranoni
shfaq linjat deri në (-B) dhe pastaj (-A) të shprehjes së gjetur. Për ta bërë këtë, duhet të specifikoni pas opsionit numrin e rreshtave që duhet të shfaqen.
# 2 строки до
ack --js --column -B 2 "query.once('" ./lib/
# 2 строки после
ack --js --column -A 2 "query.once('" . /lib/
Dhe nëse keni nevojë për të dyja, atëherë përdorni (-S)
ack --js --column -C 2 "query.once('" ./lib/
Ekziston edhe një opsion (-v) për të përmbysur kërkimin, d.m.th. për të treguar linjat që nuk përmbajnë një model të caktuar.
Shprehje e rregullt
Ack, ndryshe nga grep, përdor shprehje të përputhshme me Perl.
Për mua ky është një plus i madh; nuk më duhet të mbaj mend një sintaksë të veçantë për shprehjet e rregullta.
ack 'vars+adds+'
Shembull më kompleks
ack '*s+[vd+.d+.d+]'
Shpesh dëshironi të lini në rezultate vetëm atë që përputhet me shabllonin. Opsioni --output do të ndihmojë këtu (-o)
ack -o '*s+[vd+.d+.d+]'
Përveç kësaj, duke përdorur kllapa mund të zgjedhim pjesën e gjetur dhe ta aksesojmë atë në dalje përmes ndryshores $[group number]. Për shembull,
ack --output='version is $1' '*s+[v(d+.d+.d+)]'
Ack ka opsione të dobishme --varg-fillim и --varg-fund. Ato ndihmojnë kur
Të dhënat nuk ruhen në një rresht, por në formë shumë-line.
Për shembull, ekziston një skedar me kod sql
Le të nxjerrim emrat e kolonave. Fillimi i bllokut do të jetë një rresht që fillon me SELECT, dhe fundi do të jetë një rresht që fillon me FROM.
ack --range-start ^SELECT --range-end ^FROM 'td+.' ./test.sql
Nëse shprehja e kërkimit përmban karaktere të veçanta si pikë, kllapa dhe të tjera, atëherë për të mos u shpëtuar atyre duke përdorur , mund të përdorni opsionin -Q.
# Поиск с экранированием
ack --json 'mysql.'
# Поиск без экранирования
ack --json -Q mysql.
Puna me skedarë
Merrni një listë të skedarëve me një shtesë specifike
ack -f --js
Gjeni të gjithë skedarët js emri i të cilëve fillon me P* duke përdorur opsionin (-g).
ack -g --js '/Pa.+.js$'
konfiguracion
Shërbimi ka skedarin e vet të konfigurimit. Ju mund të keni një konfigurim global për përdoruesin (~/.ackrc) dhe një lokal për një dosje specifike (duhet të krijoni një skedar .ackrc në dosje).
Shumica e opsioneve që janë shkruar në konfigurime mund të specifikohen manualisht kur thirren. Le të shohim disa prej tyre.
Injoroni dosjen kur kërkoni
--ignore-dir=dist
Le të shtojmë një lloj skedari të personalizuar -vue.
--type-add=vue:ext:js,vue
Tani mund të përdorni opsionin --vue për të kërkuar skedarë .vue. Për shembull: Aplikacioni ack --vue.
Ju mund të specifikoni një listë të shtesave për këtë opsion. Për shembull, këtu, kur përdorni -vue, do të përpunohet sa vijon: skedarët .js.
Injoroni skedarët, për shembull të minuar *.min.js
--ignore-file=match:/.min.js$/
Instalim
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
Shtojcat për redaktorët:
Përfundim
Këto nuk janë të gjitha mundësitë. Lista e plotë e funksioneve mund të shihet duke ekzekutuar:
ack –-help
# или
ack --man
Shërbimi ack ju lejon të bëni kërkimin në terminal më të përshtatshëm dhe fleksibël. Dhe duke përdorur tubacionin (ack -C 10 përshëndetje | pranoj botën) mund të krijoni një kombinim të fuqishëm për kërkimin dhe filtrimin e të dhënave në sistemin e skedarëve dhe në vetë skedarët.
Burimi: www.habr.com