Rad bi spregovoril o eni utiliti za iskanje, ki zelo poenostavi življenje. Ko pridem na strežnik in moram nekaj poiskati, najprej preverim, ali je ack nameščen. Ta utilita je odlična zamenjava za grep in nekako tudi za find in wc. Zakaj ne grep? Ack ima bolj prijazne privzete nastavitve, bolj berljive možnosti, perl regularne izraze in sistem konfiguracij. Če radi (morate) iščete prek terminala, jo morate nujno preizkusiti.
Osnovne funkcionalnosti
Ack je privzeto rekursive, pisati manj možnosti je vedno dobro.
Lahko uporabljamo zastavico -w, da povemo utiliti, naj išče primerek našega predloge, obdanega z mejami besed (belimi znaki, poševnica itd.).
ack -w mysql
Ack podpira iskanje po vrstah datotek. Na primer, najdemo različico modula v json datotekah.
ack --json '"version":s+"d+.d+.d+"'
Celoten seznam podprtih vrst datotek lahko vidimo s pomočjo:
ack --help-typesPogosto moramo prešteti, kolikokrat se fraza pojavi v dnevniški datoteki, na primer, da bi razumeli, koliko podatkov je skript obdelal.
![]()
Preštejmo, kolikokrat se process pojavi v datoteki test.log, brez upoštevanja velikosti črk (-i).
Lahko preštejemo pojavitve ne le v eni določen datoteki, temveč v skupini. Dopolnili bomo prejšnje iskanje besede mysql: prešteli bomo število pojavitev besed (-c) v *.js datotekah (—js), izključili datoteke, v katerih ni nič najdenega (-h) in sešteli rezultat.
# выведем на экран все вхождения
ack --js -w mysql
# считаем общую сумму вхождений
ack --js -wch mysql
Poleg tega lahko pridobimo podroben spričevalo o številu pojavitev v vsaki datoteki s pomočjo (-l)
ack --js -w -cl mysql
Če potrebujete dodatni kontekst za iskanje, lahko od ack
zahtevate, naj prikaže vrstice pred (-B) in po (-A) najdenem izrazu. Za to morate navesti število vrstic, ki jih želite prikazati.
# 2 строки до
ack --js --column -B 2 "query.once('" ./lib/
# 2 строки после
ack --js --column -A 2 "query.once('" . /lib/
In če potrebujete oboje, uporabite (-C)
ack --js --column -C 2 "query.once('" .\/lib\/Obstaja tudi možnost (-v) za obrnjeno iskanje, tj. prikazati vrstice, v katerih ni določenega vzorca.
Redni izrazi
Ack za razliko od grepa uporablja Perl združljive izraze.
Zame je to velika prednost, ne potrebujem si zapomniti ločene sintakse za regulativke.
ack 'vars+adds+'
A more complex example
ack '*s+[vd+.d+.d+]'
Pogosto želimo v rezultatih obdržati samo tisto, kar se ujema z vzorcem. Tukaj bo pomagala možnost —output (-o)
ack -o '*s+[vd+.d+.d+]'
Poleg tega lahko s pomočjo okroglih okvirov izpostavimo najden del in se na njega sklicujemo v izhodu preko spremenljivke $[številka skupine]. Na primer,
ack --output='verzija je $1' '*s+[v(d+.d+.d+)]'
Ack ima koristne možnosti --range-start in --range-end. Pomagajo, ko
so podatki shranjeni ne v eni vrstici, temveč v več vrsticah.
Na primer, imamo datoteko s sql kodo

Izvlecimo 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
Če iskalnemu izrazu sledijo posebni znaki, kot so pika, okrogla okvira in drugi, jih za izogibanje pobegom lahko uporabimo možnost -Q.
# Поиск с экранированием
ack --json 'mysql.'
# Поиск без экранирования
ack --json -Q mysql.
Delo s datotekami
Pridobite seznam datotek z določenim razširitvijo
ack -f --js
Najdi vse js datoteke, katerih ime se začne s P*, z uporabo možnosti (-g).
ack -g --js '\/Pa.+.js$'
Конфигурация
Orodje ima svojo konfiguracijsko datoteko. Lahko imate tako globalno konfiguracijo za uporabnika (~\/ .ackrc), kot tudi lokalno za konkretno mapo (v mapi je potrebno ustvariti datoteko .ackrc).
Večina možnosti, ki so zapisane v konfiguracijah, se lahko ročno vpiše ob klicu. Poglejmo nekatere od njih.
Ignorirajte mapo pri iskanju
--ignore-dir=distDodajmo po meri tip datoteke — vue.
--type-add=vue:ext:js,vueZdaj lahko uporabimo možnost —vue za iskanje v datotekah .vue. Na primer: ack —vue App.
Pri tem lahko navedete seznam razširitev za to možnost. Na primer, tukaj pri uporabi —vue bodo obdelane tudi .js datoteke.
Игнорировать файлы, например, минифицированные *.min.js
--ignore-file=match:\/ .min.js$\/Namestitev
CentOS
yum update -y && yum install ack -yUbuntu
apt-get update -y && apt-get install ack-grep -yMac OS
brew update && brew install ackNamestitev s spletne strani
curl https:\/\/beyondgrep.com\/ack-v3.3.1 > ~\/bin\/ack && chmod 0755 ~\/bin\/ackVtičniki za urejevalnike:
Zaključek
To nikakor niso vse možnosti. Celoten seznam funkcij si lahko ogledate tako, da izvedete:
ack –-help
# ali
ack --manOrodje ack omogoča bolj priročno in prilagodljivo iskanje v terminalu. S pomočjo pipeline (ack -C 10 hello | ack world) lahko ustvarite zmogljiv kombajn za iskanje in filtriranje podatkov v datotečnem sistemu in v samih datotekah.
Izvor: habr.com
