Ack labāk nekā grep

Vēlos pastāstÄ«t par vienu meklēŔanas rÄ«ku, kas ļoti atvieglo dzÄ«vi. Kad es nonāku serverÄ« un man kaut kas jāpameklē, es vispirms pārbaudu, vai ir instalēts ack. Å is rÄ«ks ir lieliska grep aizstājēja, kā arÄ« noteiktā mērā find un wc. Kāpēc ne grep? Ack piedāvā patÄ«kamākus noklusējuma iestatÄ«jumus, cilvēkam lasāmākas opcijas, perl regulārās izteiksmes un konfigurācijas sistēmu. Ja jums patÄ«k (vai ir jāsper) meklēt caur termināli, noteikti ir vērts to izmēģināt.

Pamati

Ack pēc noklusējuma ir rekurss, un rakstīt mazāk opciju vienmēr ir labi.

Mēs varam izmantot karogu -w, lai pateiktu rīkam meklēt mūsu parauga eksemplāru, ko ierobežo vārdu robežas (burtiskie simboli, slīpsvītras u.tml.).

ack -w mysql

Ack labāk nekā grep

Ack atbalsta meklēŔanu pēc failu tipiem. Piemēram, meklēsim moduļa versiju json failos.

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

Ack labāk nekā grep

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

ack --help-types

Bieži ir jāskaita, cik reizes frāze sastopama žurnālfailā, piemēram, lai saprastu, cik daudz datu skripts apstrādāja.

Ack labāk nekā grep
Saskaitīsim, cik reizes process sastopams failā test.log, ignorējot reģistru (-i).

Mēs varam skaitÄ«t ieejas ne tikai vienā konkrētā failā, bet arÄ« grupā. Uzlabosim iepriekŔējo meklējumu, tāpēc saskaitÄ«sim vārda mysql parādīŔanās reizes: (-c) *.js failos (--js), izņemot failus, kuros nekā nav atrasts (-h) un apkopojoÅ”o kopsummu.

# вывеГем на ŃŠŗŃ€Š°Š½ все Š²Ń…Š¾Š¶Š“ŠµŠ½ŠøŃ
ack --js -w mysql
# считаем Š¾Š±Ń‰ŃƒŃŽ сумму вхожГений
ack --js -wch mysql

Ack labāk nekā grep

Turklāt mēs varam saņemt detalizētu ziņojumu par parādīŔanās skaitu katrā failā, izmantojot (-l)

ack --js -w -cl mysql

Ack labāk nekā grep

Ja jums ir nepiecieÅ”ams papildus konteksts meklēŔanai, varat lÅ«gt ack
parādīt rindas pirms (-B) un pēc (-A) atrastā izteiciena. Lai to izdarītu, jānorāda skaits rindu, kuras jāparāda pēc opcijas.

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

Ack labāk nekā grep

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

Ack labāk nekā grep

Un ja nepiecieŔams gan viens, gan otrs, lietojiet (-C)

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

Tāpat ir opcija (-v) meklēŔanas inversijai, t.i., parādÄ«t rindas, kurās nav noteiktā parauga.

Regulārās izteiksmes

Ack, atŔķirībā no grep, izmanto Perl saderīgas izteiksmes.
Man tas ir liels pluss, jo nav jāatceras atseviŔķa sinatxse regulārajām izteiksmēm.

ack 'vars+adds+'

Ack labāk nekā grep

Sarežģītāks piemērs

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

Ack labāk nekā grep

Bieži vien gribas rezultātos atstāt tikai to, kas atbilst paraugam. Šeit palīdzēt var opcija --output (-o)

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

Ack labāk nekā grep

Papildus tam, izmantojot apaļas iekavas, mēs varam izcelt atrasto daļu un piekļūt tai output caur mainīgo $[grupas numurs]. Piemēram,

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

Ack labāk nekā grep

Ack piedāvā noderÄ«gas iespējas —range-start un —range-end. Tās palÄ«dz, kad
dati netiek glabāti vienā rindā, bet gan daudzrindās.

Piemēram, ir fails ar SQL kodu

Ack labāk nekā grep

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

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

Ack labāk nekā grep

Ja meklēŔanas izteiksmē ir iekļauti speciāli simboli, piemēram, punkts, apaļā iekava un citi, tad, lai tos neekrānētu ar , var izmantot opciju -Q.

# Поиск с ŃŠŗŃ€Š°Š½ŠøŃ€Š¾Š²Š°Š½ŠøŠµŠ¼ 
ack --json 'mysql.'    
# Поиск без ŃŠŗŃ€Š°Š½ŠøŃ€Š¾Š²Š°Š½ŠøŃ
ack --json -Q mysql.

Ack labāk nekā grep

Darbs ar failiem

Iegūt failu sarakstu ar noteiktu paplaŔinājumu

ack -f --js

Ack labāk nekā grep

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

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

Ack labāk nekā grep

Konfigurācija

RÄ«kam ir sava konfigurācijas faila. Var bÅ«t gan globālā konfigurācija lietotājam (~/.ackrc), gan lokālā konkrētai mapei (mapē nepiecieÅ”ams izveidot failu .ackrc).

Lielākā daļa opciju, kas tiek norādītas konfigurācijās, var tikt arī roku rakstīti, izsaucot. Apskatīsim dažas no tām.

Ignorēt mapi meklēŔanā

--ignore-dir=dist

Pievienosim pielāgotu faila tipu —vue.

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

Tagad varam izmantot opciju —vue, lai meklētu failos .vue. Piemēram: ack —vue App.
Å ajā gadÄ«jumā var norādÄ«t paplaÅ”inājumu sarakstu Å”ai opcijai. Piemēram, Å”eit, izmantojot —vue, tiks apstrādāti arÄ«
.js faili.

Š˜Š³Š½Š¾Ń€ŠøŃ€Š¾Š²Š°Ń‚ŃŒ файлы, например, минифицированные *.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

Instalācija no vietnes

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

PaplaŔinājumi redaktoriem:

Secinājums

Tas nav viss. Pilnu funkciju sarakstu var apskatīt, izpildot:

ack --help
# vai
ack --man

RÄ«ks ack ļauj meklēŔanu terminālā padarÄ«t ērtāku un elastÄ«gāku. Un, izmantojot pipeline (ack -C 10 hello | ack world), var izveidot jaudÄ«gu kombajnu datu meklēŔanai un filtrēŔanai failu sistēmā un paÅ”os failos.

Avots: habr.com

Iegādājieties uzticamu tÄ«mekļa hostingu ar DDoS aizsardzÄ«bu, VPS VDS serveriem šŸ”„ Iegādājieties uzticamu tÄ«mekļa hostingu ar DDoS aizsardzÄ«bu, VPS VDS serveriem | ProHoster