Ack është më i mirë se grep

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

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

Ack është më i mirë se grep

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.

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

Ack është më i mirë se grep

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

Ack është më i mirë se grep

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/

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

Ack është më i mirë se grep

Shembull më kompleks

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

Ack është më i mirë se grep

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

Ack është më i mirë se grep

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

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

Ack është më i mirë se grep

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

Ack është më i mirë se grep

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.

Ack është më i mirë se grep

Puna me skedarë

Merrni një listë të skedarëve me një shtesë specifike

ack -f --js

Ack është më i mirë se grep

Gjeni të gjithë skedarët js emri i të cilëve fillon me P* duke përdorur opsionin (-g).

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

Ack është më i mirë se grep

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

Shto një koment