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 subtenas serĉadon laŭ dosiertipo. Ekzemple, ni trovu la modulan version en json-dosieroj.
ack --json '"version":s+"d+.d+.d+"'
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.
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
Krome, ni povas ricevi detalan raporton pri la nombro da okazoj en ĉiu dosiero uzante (-l)
ack --js -w -cl mysql
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/
# 2 строки после
ack --js --column -A 2 "query.once('" . /lib/
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+'
Pli kompleksa ekzemplo
ack '*s+[vd+.d+.d+]'
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+]'
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 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
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
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.
Laborante kun dosieroj
Akiru liston de dosieroj kun specifa etendo
ack -f --js
Trovu ĉiujn js-dosierojn kies nomo komenciĝas per P* uzante la opcion (-g).
ack -g --js '/Pa.+.js$'
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