Ack ir labāks par grep

Es vēlos jums pastāstīt par vienu meklēšanas utilītu, kas ievērojami vienkāršo dzīvi. Kad es nonāku serverī un man kaut kas jāmeklē, vispirms es pārbaudu, vai ack ir instalēts. Šī utilīta ir lielisks grep aizstājējs, kā arī zināmā mērā find un wc. Kāpēc ne grep? Ack ir labāki iestatījumi, vairāk cilvēkiem lasāmas iespējas, perl regex un konfigurācijas sistēma. Ja jums patīk (jā) meklēt caur termināli, tad noteikti ir jāizmēģina.

Pamatfunkcijas

Ack pēc noklusējuma ir rekursīvs, un rakstīt mazāk opciju vienmēr ir laba ideja.

Mēs varam izmantot karogu -wlai liktu utilītai meklēt mūsu raksta piemēru, ko ieskauj vārdu robežas (atstarpes, slīpsvītras utt.).

ack -w mysql

Ack ir labāks par grep

Ack atbalsta meklēšanu pēc faila veida. Piemēram, json failos atradīsim moduļa versiju.

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

Ack ir labāks par grep

Pilnu atbalstīto failu tipu sarakstu var apskatīt, izmantojot:

ack --help-types

Bieži vien jums ir jāuzskaita, cik reižu frāze parādās žurnālfailā, piemēram, lai saprastu, cik daudz datu skripts apstrādāja.

Ack ir labāks par grep
Mēs saskaitām, cik reižu process notiek test.log failā, neņemot vērā gadījumu (-i).

Mēs varam uzskaitīt notikumus ne tikai vienā konkrētā failā, bet arī grupā. Pabeigsim iepriekšējo vārda mysql meklēšanu: saskaitiet vārdu skaitu (ar) *.js failos(--js), izņemot failus, kuros nekas netika atrasts (-h) un rezultāta summēšana.

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

Ack ir labāks par grep

Turklāt mēs varam iegūt detalizētu ziņojumu par gadījumu skaitu katrā failā, izmantojot (-l)

ack --js -w -cl mysql

Ack ir labāks par grep

Ja meklēšanai nepieciešams papildu konteksts, varat jautāt ack
rādīt rindas līdz (-B) un pēc (-A) no atrastās izteiksmes. Lai to izdarītu, pēc opcijas ir jānorāda rindiņu skaits, kas jāparāda.

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

Ack ir labāks par grep

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

Ack ir labāks par grep

Un, ja jums ir nepieciešami abi, izmantojiet (-C)

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

Ir arī iespēja (-v), lai apgrieztu meklēšanu, t.i., parādītu līnijas, kas nesatur noteiktu paraugu.

Regulāra izteiksme

Ack, atšķirībā no grep, izmanto ar Perl saderīgas izteiksmes.
Man tas ir liels pluss; man nav jāatceras atsevišķa regulāro izteiksmju sintakse.

ack 'vars+adds+'

Ack ir labāks par grep

Sarežģītāks piemērs

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

Ack ir labāks par grep

Bieži vien rezultātos vēlaties atstāt tikai to, kas atbilst veidnei. Šeit palīdzēs opcija --output (-o)

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

Ack ir labāks par grep

Turklāt, izmantojot iekavas, mēs varam atlasīt atrasto daļu un piekļūt tai izvadē, izmantojot mainīgo $[grupas numurs]. Piemēram,

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

Ack ir labāks par grep

Ack ir noderīgas iespējas -- diapazona sākums и -- diapazona beigas. Viņi palīdz, kad
Dati tiek glabāti nevis vienā rindā, bet vairāku rindu formā.

Piemēram, ir fails ar sql kodu

Ack ir labāks par grep

Izvilksim kolonnu nosaukumus. Bloka sākums būs rinda, kas sākas ar SELECT, un beigas būs rinda, kas sākas ar FROM.

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

Ack ir labāks par grep

Ja meklēšanas izteiksmē ir īpašas rakstzīmes, piemēram, punkts, iekavas un citas, varat izmantot opciju, lai tās neizbēgtu, izmantojot . -Q.

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

Ack ir labāks par grep

Darbs ar failiem

Iegūstiet failu sarakstu ar noteiktu paplašinājumu

ack -f --js

Ack ir labāks par grep

Atrodiet visus js failus, kuru nosaukums sākas ar P*, izmantojot opciju (-g).

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

Ack ir labāks par grep

Konfigurācija

Lietderībai ir savs konfigurācijas fails. Jums var būt gan globālā konfigurācija lietotājam (~/.ackrc), gan lokāla noteiktai mapei (mapē ir jāizveido .ackrc fails).

Lielāko daļu opciju, kas ir ierakstītas konfigurācijās, var manuāli norādīt, kad tiek izsaukta. Apskatīsim dažus no tiem.

Meklējot, ignorēt mapi

--ignore-dir=dist

Pievienosim pielāgotu faila tipu -vue.

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

Tagad failu meklēšanai varat izmantot opciju --vue .vue. Piemēram: ack --vue App.
Šai opcijai varat norādīt paplašinājumu sarakstu. Piemēram, šeit, izmantojot -vue, tiks apstrādāts:
.js faili.

Ignorēt failus, piemēram, samazinātus *.min.js

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

Uzstādīšana

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

Uzstādīšana no vietnes

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

Redaktoru spraudņi:

Secinājums

Šīs nav visas iespējas. Pilnu funkciju sarakstu var apskatīt, palaižot:

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

Ack utilīta ļauj padarīt meklēšanu terminālī ērtāku un elastīgāku. Un izmantojot cauruļvadu (ack -C 10 sveiki | ack pasaule) varat izveidot jaudīgu kombināciju datu meklēšanai un filtrēšanai failu sistēmā un pašos failos.

Avots: www.habr.com

Pievieno komentāru