Ack je boljši od grep

Želim vam povedati o enem pripomočku za iskanje, ki močno poenostavi življenje. Ko pridem do strežnika in moram nekaj poiskati, najprej preverim, ali je ack nameščen. Ta pripomoček je odlična zamenjava za grep, do neke mere pa tudi za find in wc. Zakaj ne grep? Ack ima lepše nastavitve takoj po namestitvi, bolj berljive možnosti, perl regex in konfiguracijski sistem. Če radi (morate) iskati po terminalu, ga vsekakor preizkusite.

Osnovne lastnosti

Ack je privzeto rekurziven in pisanje manj možnosti je vedno dobra ideja.

Lahko uporabimo zastavo -wda pripomočku povemo, naj poišče primerek našega vzorca, obkroženega z besednimi mejami (presledki, poševnice itd.).

ack -w mysql

Ack je boljši od grep

Ack podpira iskanje po vrsti datoteke. Na primer, poiščimo različico modula v datotekah json.

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

Ack je boljši od grep

Celoten seznam podprtih vrst datotek si lahko ogledate z:

ack --help-types

Pogosto morate na primer prešteti, kolikokrat se fraza pojavi v dnevniški datoteki, da razumete, koliko podatkov je skript obdelal.

Ack je boljši od grep
Štejemo, kolikokrat se proces pojavi v datoteki test.log, pri čemer ne upoštevamo velikih in malih črk (-i).

Pojavitve lahko štejemo ne samo v eni določeni datoteki, ampak v skupini. Zaključimo prejšnje iskanje besede mysql: preštejmo število pojavitev besed (-od) v datotekah *.js(--js), razen datotek, v katerih ni bilo najdenega ničesar (-h) in seštevanje rezultata.

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

Ack je boljši od grep

Poleg tega lahko dobimo podrobno poročilo o številu pojavitev v vsaki datoteki z uporabo (-l)

ack --js -w -cl mysql

Ack je boljši od grep

Če potrebujete dodaten kontekst za svoje iskanje, lahko vprašate ack
prikaži vrstice do (-B) in potem (-A) najdenega izraza. Če želite to narediti, morate za možnostjo določiti število vrstic, ki jih je treba prikazati.

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

Ack je boljši od grep

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

Ack je boljši od grep

In če potrebujete oboje, uporabite (-Od)

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

Obstaja tudi možnost (-v), da obrnete iskanje, tj. prikažete vrstice, ki ne vsebujejo danega vzorca.

Vsakdanje izražanje

Ack za razliko od grep uporablja Perl združljive izraze.
Zame je to velik plus; ni mi treba zapomniti ločene sintakse za regularne izraze.

ack 'vars+adds+'

Ack je boljši od grep

Bolj zapleten primer

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

Ack je boljši od grep

Pogosto želite v rezultatih pustiti le tisto, kar ustreza predlogi. Tu bo v pomoč možnost --output (-o)

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

Ack je boljši od grep

Poleg tega lahko z uporabo oklepajev izberemo najdeni del in dostopamo do njega v izhodu prek spremenljivke $[številka skupine]. na primer

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

Ack je boljši od grep

Ack ima uporabne možnosti --začetek obsega и --konec obsega. Pomagajo, ko
Podatki niso shranjeni v eni vrstici, ampak v večvrstični obliki.

Na primer, obstaja datoteka s kodo sql

Ack je boljši od grep

Izluščimo imena stolpcev. Začetek bloka bo vrstica, ki se začne z SELECT, konec pa vrstica, ki se začne z FROM.

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

Ack je boljši od grep

Če iskalni izraz vsebuje posebne znake, kot so pika, oklepaj in drugi, lahko uporabite možnost, da jim ne uidete z uporabo -Q.

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

Ack je boljši od grep

Delo z datotekami

Pridobite seznam datotek z določeno pripono

ack -f --js

Ack je boljši od grep

Poiščite vse datoteke js, katerih ime se začne s P* z ​​možnostjo (-g).

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

Ack je boljši od grep

Konfiguracija

Pripomoček ima svojo konfiguracijsko datoteko. Imate lahko globalno konfiguracijo za uporabnika (~/.ackrc) in lokalno za določeno mapo (v mapi morate ustvariti datoteko .ackrc).

Večino možnosti, zapisanih v konfiguracijah, je mogoče ob klicu določiti ročno. Poglejmo si jih nekaj.

Prezri mapo pri iskanju

--ignore-dir=dist

Dodajmo vrsto datoteke po meri -vue.

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

Zdaj lahko uporabite možnost --vue za iskanje datotek .vue. Na primer: Aplikacija ack --vue.
Za to možnost lahko določite seznam razširitev. Na primer, tukaj bo pri uporabi -vue obdelano naslednje:
datoteke .js.

Prezrite datoteke, na primer pomanjšane *.min.js

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

Namestitev

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

Namestitev s spletnega mesta

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

Vtičniki za urejevalnike:

Zaključek

To niso vse možnosti. Celoten seznam funkcij si lahko ogledate tako, da zaženete:

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

Pripomoček ack vam omogoča, da bo iskanje v terminalu bolj priročno in prilagodljivo. In z uporabo cevovoda (ack -C 10 pozdravljeni | ack svet) lahko ustvarite zmogljivo kombinacijo za iskanje in filtriranje podatkov v datotečnem sistemu in v samih datotekah.

Vir: www.habr.com

Dodaj komentar