Ack je bolji od grep

Želim vam reći o jednom uslužnom programu za pretraživanje koji uvelike pojednostavljuje život. Kada dođem do servera i moram nešto potražiti, prvo što radim je provjeriti da li je ack instaliran. Ovaj uslužni program je odlična zamjena za grep, kao i find i wc u određenoj mjeri. Zašto ne grep? Ack ima bolje postavke iz kutije, više opcija koje su čitljive ljudima, perl regex i konfiguracijski sistem. Ako volite (morate) da pretražujete kroz terminal, onda ga svakako trebate isprobati.

Osnovne karakteristike

Ack je po defaultu rekurzivan, a pisanje manjeg broja opcija je uvijek dobra ideja.

Možemo koristiti zastavu -wda kažemo uslužnom programu da traži primjer našeg uzorka okruženog granicama riječi (razmak, kose crte, itd.).

ack -w mysql

Ack je bolji od grep

Ack podržava pretraživanje po tipu datoteke. Na primjer, pronađimo verziju modula u json datotekama.

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

Ack je bolji od grep

Potpuna lista podržanih tipova datoteka može se vidjeti pomoću:

ack --help-types

Često morate izbrojati koliko se puta fraza pojavljuje u datoteci evidencije, na primjer, da biste razumjeli koliko je podataka skripta obrađivala.

Ack je bolji od grep
Računamo koliko se puta proces dešava u test.log datoteci, ne uzimajući u obzir slučaj (-i).

Možemo brojati pojavljivanja ne samo u jednoj određenoj datoteci, već iu grupi. Završimo prethodnu pretragu riječi mysql: izbrojimo broj pojavljivanja riječi (-od) u *.js fajlovima(--js), isključujući fajlove u kojima ništa nije pronađeno (-h) i sumiranjem rezultata.

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

Ack je bolji od grep

Osim toga, možemo dobiti detaljan izvještaj o broju pojavljivanja u svakoj datoteci koristeći (-l)

ack --js -w -cl mysql

Ack je bolji od grep

Ako vam je potreban dodatni kontekst za pretragu, možete zatražiti potvrdu
prikaži linije do (-B) i poslije (-A) pronađenog izraza. Da biste to učinili, potrebno je nakon opcije navesti broj redova koji se trebaju prikazati.

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

Ack je bolji od grep

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

Ack je bolji od grep

A ako vam treba oboje, onda koristite (-C)

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

Postoji i opcija (-v) da biste invertirali pretragu, tj. prikazali linije koje ne sadrže dati uzorak.

Regularni izraz

Ack, za razliku od grep, koristi izraze kompatibilne sa Perl-om.
Za mene je ovo veliki plus; ne moram da pamtim zasebnu sintaksu za regularne izraze.

ack 'vars+adds+'

Ack je bolji od grep

Složeniji primjer

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

Ack je bolji od grep

Često želite da u rezultatima ostavite samo ono što odgovara šablonu. Opcija --output će ovdje pomoći (-o)

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

Ack je bolji od grep

Osim toga, pomoću zagrada možemo odabrati pronađeni dio i pristupiti mu u izlazu preko varijable $[group number]. Na primjer,

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

Ack je bolji od grep

Ack ima korisne opcije --range-start и --kraj-kraj. Pomažu kada
Podaci se ne pohranjuju u jednom redu, već u višelinijskom obliku.

Na primjer, postoji datoteka sa sql kodom

Ack je bolji od grep

Izdvojimo imena kolona. Početak bloka će biti red koji počinje sa SELECT, a kraj će biti red koji počinje sa FROM.

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

Ack je bolji od grep

Ako izraz za pretraživanje sadrži posebne znakove kao što su tačka, zagrada i drugi, onda kako ih ne biste izbjegli pomoću , možete koristiti opciju -Q.

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

Ack je bolji od grep

Rad sa fajlovima

Dobijte listu datoteka sa određenim ekstenzijom

ack -f --js

Ack je bolji od grep

Pronađite sve js fajlove čije ime počinje sa P* koristeći opciju (-g).

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

Ack je bolji od grep

Konfiguracija

Uslužni program ima svoju vlastitu datoteku za konfiguraciju. Možete imati i globalnu konfiguraciju za korisnika (~/.ackrc) i lokalnu za određeni folder (morate kreirati .ackrc fajl u folderu).

Većina opcija koje su napisane u konfiguracijama mogu se ručno specificirati kada se pozovu. Pogledajmo neke od njih.

Zanemari folder prilikom pretraživanja

--ignore-dir=dist

Hajde da dodamo prilagođeni tip fajla -vue.

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

Sada možete koristiti opciju --vue za pretraživanje datoteka .vue. Na primjer: ack --vue App.
Možete odrediti listu ekstenzija za ovu opciju. Na primjer, ovdje, kada koristite -vue, sljedeće će se obraditi:
.js fajlovi.

Zanemarite datoteke, na primjer minimizirani *.min.js

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

postavljanje

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

Instalacija sa sajta

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

Dodaci za urednike:

zaključak

Ovo nisu sve mogućnosti. Kompletnu listu funkcija možete pogledati pokretanjem:

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

Ack uslužni program vam omogućava da pretraživanje u terminalu učinite praktičnijim i fleksibilnijim. I pomoću cjevovoda (ack -C 10 zdravo | ack world) možete kreirati moćnu kombinaciju za pretraživanje i filtriranje podataka u sistemu datoteka i samim datotekama.

izvor: www.habr.com

Dodajte komentar