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 ondersteun soek volgens lêertipe. Kom ons vind byvoorbeeld die moduleweergawe in json-lêers.
ack --json '"version":s+"d+.d+.d+"'
'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.
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
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
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/
# 2 строки после
ack --js --column -A 2 "query.once('" . /lib/
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+'
Meer komplekse voorbeeld
ack '*s+[vd+.d+.d+]'
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+]'
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 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
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
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.
Werk met lêers
Kry 'n lys van lêers met 'n spesifieke uitbreiding
ack -f --js
Soek alle js-lêers wie se naam met P* begin deur die opsie (-g).
ack -g --js '/Pa.+.js$'
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