Ack is beter as grep

Ek wil jou vertel van een soekprogram wat die lewe baie vergemaklik. Wanneer ek by die bediener kom en ek moet iets soek, is die eerste ding wat ek doen om te kyk of ack geïnstalleer is. Hierdie hulpprogram is 'n uitstekende plaasvervanger vir grep, sowel as vind en wc tot 'n mate. Hoekom nie grep nie? Ack het mooier instellings uit die boks, meer mens-leesbare opsies, perl regex en 'n konfigurasiestelsel. As jy deur die terminale wil (moet) soek, moet jy dit beslis probeer.

Basiese kenmerke

Ack is by verstek rekursief, en die skryf van minder opsies is altyd 'n goeie idee.

Ons kan 'n vlag gebruik -wom vir die nutsprogram te sê om te soek na 'n voorbeeld van ons patroon omring deur woordgrense (wit spasie, skuinsstreepies, ens.).

ack -w mysql

Ack is beter as grep

Ack ondersteun soek volgens lêertipe. Kom ons vind byvoorbeeld die moduleweergawe in json-lêers.

ack --json '"version":s+"d+.d+.d+"'

Ack is beter as grep

'n Volledige lys van ondersteunde lêertipes kan bekyk word deur:

ack --help-types

Dikwels moet jy tel hoeveel keer 'n frase in 'n loglêer voorkom, byvoorbeeld om te verstaan ​​hoeveel data die skrif verwerk het.

Ack is beter as grep
Ons tel hoeveel keer proses in die test.log-lêer plaasvind, sonder inagneming van geval (-i).

Ons kan gebeurtenisse nie net in een spesifieke lêer tel nie, maar in 'n groep. Kom ons finaliseer die vorige soektog na die woord mysql: tel die aantal voorkoms van woorde (- Met) in *.js-lêers(--js), uitgesluit lêers waarin niks gevind is nie (-h) en som die resultaat op.

# выведем на экран все вхождения
ack --js -w mysql
# считаем общую сумму вхождений
ack --js -wch mysql

Ack is beter as grep

Daarbenewens kan ons 'n gedetailleerde verslag kry oor die aantal voorvalle in elke lêer deur gebruik te maak van (-l)

ack --js -w -cl mysql

Ack is beter as grep

As jy addisionele konteks vir jou soektog nodig het, kan jy ack vra
wys lyne tot (-B) en nadat (-A) van die gevonde uitdrukking. Om dit te doen, moet jy na die opsie die aantal reëls spesifiseer wat gewys moet word.

# 2 строки до 
ack --js --column -B 2 "query.once('" ./lib/

Ack is beter as grep

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

Ack is beter as grep

En as jy albei nodig het, gebruik dan (-C)

ack --js --column -C 2 "query.once('" ./lib/

Daar is ook 'n opsie (-v) om die soektog om te keer, dit wil sê lyne te wys wat nie 'n gegewe patroon bevat nie.

Gewone uitdrukking

Ack, anders as grep, gebruik Perl-versoenbare uitdrukkings.
Vir my is dit 'n groot pluspunt; ek hoef nie 'n aparte sintaksis vir gereelde uitdrukkings te onthou nie.

ack 'vars+adds+'

Ack is beter as grep

Meer komplekse voorbeeld

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

Ack is beter as grep

Dikwels wil jy net wat by die sjabloon pas in die resultate laat. Die --uitvoer opsie sal hier help (-o)

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

Ack is beter as grep

Daarbenewens, met behulp van hakies kan ons die gevind deel kies en dit in uitvoer verkry deur die $[groepnommer] veranderlike. Byvoorbeeld,

ack --output='version is $1' '*s+[v(d+.d+.d+)]'

Ack is beter as grep

Ack het nuttige opsies --reeks-begin и --reeks-einde. Hulle help wanneer
Die data word nie in een reël gestoor nie, maar in multi-lyn vorm.

Daar is byvoorbeeld 'n lêer met sql-kode

Ack is beter as grep

Kom ons haal die kolomname uit. Die begin van die blok sal 'n reël wees wat met SELECT begin, en die einde sal 'n reël wees wat met FROM begin.

ack --range-start ^SELECT --range-end ^FROM 'td+.' ./test.sql

Ack is beter as grep

As die soekuitdrukking spesiale karakters soos 'n punt, 'n hakies en ander bevat, kan u die opsie gebruik om dit nie te ontsnap nie. -Q.

# Поиск с экранированием 
ack --json 'mysql.'    
# Поиск без экранирования
ack --json -Q mysql.

Ack is beter as grep

Werk met lêers

Kry 'n lys van lêers met 'n spesifieke uitbreiding

ack -f --js

Ack is beter as grep

Soek alle js-lêers wie se naam met P* begin deur die opsie (-g).

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

Ack is beter as grep

opset

Die hulpprogram het sy eie konfigurasielêer. Jy kan beide 'n globale konfigurasie vir die gebruiker (~/.ackrc) en 'n plaaslike een vir 'n spesifieke vouer hê (jy moet 'n .ackrc-lêer in die vouer skep).

Die meeste van die opsies wat in die konfigurasies geskryf is, kan met die hand gespesifiseer word wanneer dit opgeroep word. Kom ons kyk na 'n paar van hulle.

Ignoreer vouer wanneer jy soek

--ignore-dir=dist

Kom ons voeg 'n pasgemaakte lêertipe -vue by.

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

Nou kan jy die --vue opsie gebruik om lêers te soek .vue. Byvoorbeeld: ack --vue App.
Jy kan 'n lys van uitbreidings vir hierdie opsie spesifiseer. Byvoorbeeld, hier, wanneer -vue gebruik word, sal die volgende verwerk word:
.js-lêers.

Ignoreer lêers, byvoorbeeld verkleinde *.min.js

--ignore-file=match:/.min.js$/

installasie

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

Installasie vanaf die webwerf

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

Inproppe vir redakteurs:

Gevolgtrekking

Dit is nie al die moontlikhede nie. Die volledige lys funksies kan bekyk word deur te hardloop:

ack –-help
# или
ack --man

Die ack-nutsding stel jou in staat om soek in die terminale meer gerieflik en buigsaam te maak. En gebruik pypleiding (ack -C 10 hallo | ack wêreld) kan jy 'n kragtige kombinasie skep om data in die lêerstelsel en in die lêers self te soek en te filter.

Bron: will.com

Voeg 'n opmerking