Ack estas pli bona ol grep

Mi volas rakonti al vi pri unu serĉa utileco, kiu multe simpligas la vivon. Kiam mi alvenas al la servilo kaj mi bezonas serĉi ion, la unua afero, kiun mi faras, estas kontroli ĉu ack estas instalita. Ĉi tiu utileco estas bonega anstataŭaĵo por grep, same kiel find kaj wc iagrade. Kial ne grep? Ack havas pli belajn agordojn el la skatolo, pli homlegeblajn opciojn, perl regex kaj agordan sistemon. Se vi ŝatas (devas) serĉi tra la terminalo, tiam vi nepre devus provi ĝin.

Bazaj Trajtoj

Ack estas rekursiva defaŭlte, kaj skribi malpli da opcioj ĉiam estas bona ideo.

Ni povas uzi flagon -wdiri al la utileco serĉi ekzemplon de nia ŝablono ĉirkaŭita de vortlimoj (blankspaco, oblikvoj, ktp.).

ack -w mysql

Ack estas pli bona ol grep

Ack subtenas serĉadon laŭ dosiertipo. Ekzemple, ni trovu la modulan version en json-dosieroj.

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

Ack estas pli bona ol grep

Kompleta listo de subtenataj dosiertipoj povas esti vidita uzante:

ack --help-types

Ofte vi devas kalkuli kiom da fojoj frazo aperas en protokolo-dosiero, ekzemple, por kompreni kiom da datumoj la skripto prilaboris.

Ack estas pli bona ol grep
Ni kalkulas kiom da fojoj procezo okazas en la test.log dosiero, ne konsiderante kazon (-i).

Ni povas kalkuli okazojn ne nur en unu specifa dosiero, sed en grupo. Ni finu la antaŭan serĉon por la vorto mysql: kalkulu la nombron da aperoj de vortoj (-Kun) en *.js dosieroj (--js), ekskludante dosierojn en kiuj nenio estis trovita (-h) kaj resumante la rezulton.

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

Ack estas pli bona ol grep

Krome, ni povas ricevi detalan raporton pri la nombro da okazoj en ĉiu dosiero uzante (-l)

ack --js -w -cl mysql

Ack estas pli bona ol grep

Se vi bezonas plian kuntekston por via serĉo, vi povas demandi ack
montri liniojn ĝis (-B) kaj post (-A) de la trovita esprimo. Por fari tion, vi devas specifi post la opcio la nombron da linioj kiuj devas esti montritaj.

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

Ack estas pli bona ol grep

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

Ack estas pli bona ol grep

Kaj se vi bezonas ambaŭ, tiam uzu (-KUN)

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

Estas ankaŭ opcio(-v) por inversigi la serĉon, t.e. montri liniojn kiuj ne enhavas antaŭfiksitan ŝablonon.

Regula esprimo

Ack, male al grep, uzas Perl-kongruajn esprimojn.
Por mi tio estas granda pluso; mi ne devas memori apartan sintakson por regulaj esprimoj.

ack 'vars+adds+'

Ack estas pli bona ol grep

Pli kompleksa ekzemplo

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

Ack estas pli bona ol grep

Ofte oni volas lasi en la rezultoj nur tion, kio kongruas kun la ŝablono. La --eliga opcio helpos ĉi tie (-o)

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

Ack estas pli bona ol grep

Krome, uzante krampojn ni povas elekti la trovitan parton kaj aliri ĝin en eligo per la variablo $[grupo nombro]. Ekzemple,

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

Ack estas pli bona ol grep

Ack havas utilajn eblojn --range-start и --range-end. Ili helpas kiam
La datumoj estas konservitaj ne en unu linio, sed en plurlinia formo.

Ekzemple, estas dosiero kun sql-kodo

Ack estas pli bona ol grep

Ni ĉerpu la kolonnomojn. La komenco de la bloko estos linio komencanta per SELECT, kaj la fino estos linio komencanta per FROM.

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

Ack estas pli bona ol grep

Se la serĉesprimo enhavas specialajn signojn kiel punkton, krampojn kaj aliajn, tiam por ne eviti ilin per , vi povas uzi la opcion -Q.

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

Ack estas pli bona ol grep

Laborante kun dosieroj

Akiru liston de dosieroj kun specifa etendo

ack -f --js

Ack estas pli bona ol grep

Trovu ĉiujn js-dosierojn kies nomo komenciĝas per P* uzante la opcion (-g).

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

Ack estas pli bona ol grep

Agordo

La ilo havas sian propran agordosieron. Vi povas havi kaj tutmondan agordon por la uzanto (~/.ackrc) kaj lokan por specifa dosierujo (vi devas krei .ackrc-dosieron en la dosierujo).

La plej multaj el la opcioj skribitaj en la agordoj povas esti mane specifitaj kiam vokita. Ni rigardu kelkajn el ili.

Ignoru dosierujon dum serĉado

--ignore-dir=dist

Ni aldonu propran dosiertipo -vue.

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

Nun vi povas uzi la opcion --vue por serĉi dosierojn .vue. Ekzemple: ack --vue App.
Vi povas specifi liston de etendoj por ĉi tiu opcio. Ekzemple, ĉi tie, kiam vi uzas -vue, la jenaj estos procesitaj:
.js dosieroj.

Ignoru dosierojn, ekzemple minigitan *.min.js

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

fikso

CentOS

yum update -y && yum install ack -y

ubuntu

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

Mac VIN

brew update && brew install  ack

Instalado de la retejo

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

Kromaĵoj por redaktiloj:

konkludo

Ĉi tiuj ne estas ĉiuj ebloj. La plena listo de funkcioj povas esti vidita rulante:

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

La ack ilo permesas vin fari serĉadon en la terminalo pli oportuna kaj fleksebla. Kaj uzante dukton (ack -C 10 saluton | ack mondo) vi povas krei potencan kombinaĵon por serĉi kaj filtri datumojn en la dosiersistemo kaj en la dosieroj mem.

fonto: www.habr.com

Aldoni komenton