Ack bolje od grep

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 bolje od grep

Ack podpira iskanje po vrstah datotek. Na primer, najdemo različico modula v json datotekah.

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

Ack bolje od grep

Celoten seznam podprtih vrst datotek lahko vidimo s pomočjo:

ack --help-types

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

Ack bolje od grep
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

Ack bolje od grep

Poleg tega lahko pridobimo podroben spričevalo o številu pojavitev v vsaki datoteki s pomočjo (-l)

ack --js -w -cl mysql

Ack bolje od grep

Č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/

Ack bolje od grep

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

Ack bolje od grep

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

Ack bolje od grep

A more complex example

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

Ack bolje od grep

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

Ack bolje od grep

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 bolje od grep

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

Ack bolje od grep

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

Ack bolje od grep

Č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.

Ack bolje od grep

Delo s datotekami

Pridobite seznam datotek z določenim razširitvijo

ack -f --js

Ack bolje od grep

Najdi vse js datoteke, katerih ime se začne s P*, z uporabo možnosti (-g).

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

Ack bolje od grep

Конфигурация

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=dist

Dodajmo po meri tip datoteke — vue.

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

Zdaj 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 -y

Ubuntu

apt-get update -y && apt-get install ack-grep -y

Mac OS

brew update && brew install ack

Namestitev s spletne strani

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

Vtičniki za urejevalnike:

Zaključek

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

ack –-help
# ali
ack --man

Orodje 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

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster