Faceți căutări pe acest blog

miercuri, 20 iunie 2012

Grep: căutare text în fișiere

 Am văzut cum putem căuta fișiere în Kde și CLI (http://stressat.blogspot.ro/2011/12/unde-esti-ma.html), ați observat că folosind kfind putem căuta și după conținutul acestor fișiere, hai să vedem cum putem căuta fișiere după conținutul acestora, cuvinte, propoziții, text în linia de comandă. Pentru aceasta folosim utilitarul Grep.
 Explicații detaliate, precum și toate opțiunile sunt date de comanda man grep, grep --help va arăta mai concis modul de utilizare al opțiunilor, acum vom vedea pe scurt modul de utilizare.
 Sintaxa generală grep este:
grep opțiuni tipar-căutare cale-către-fișier

 După cum veți observa din pagina de manual, există câteva denumiri puțin diferite, grep, egrep, fgrep, zgrep, toate sunt de fapt ipostaze ale grep, reprezintă de fapt comanda grep cu opțiuni specifice: egrep= grep -E (extended grep, căutare extinsă, poate folosi caractere speciale), fgrep= grep -F (fast grep, căutare rapidă, după un tipar fix, exact), zgrep= grep -Z (căutare în fișierele arhivate, lucrează nativ cu .zip).
 Până acum am aflat deja câteva opțiuni (-E, -F, -Z), alte opțiuni utile sunt:
-i (--ignore-case)         = ignoră diferența între minuscule și majuscule, atât pentru tiparul de căutare, cât și pentru numele fișierului
-r (-R sau --recursive) =căutare recursivă, în toate fișierele și toate directoarele; alternativ punem director/* la cale, de exemplu ~/* reprezintă toate fișierele din directorul ~
-w (--word-regexp)       = căutare după cuvinte exacte (cal de exemplu, nu va afișa și calendar, calculator, portocală, etc)
-c (--count)                     = va afișa de câte ori apare tiparul de căutare
-n (--line-number)         = va afișa numerele liniilor ce conțin tiparul de căutare
-v (--invert-match)        = va afișa invers, adică liniile ce NU conțin tiparul
-l (L minuscul)                 = în loc să afișeze liniile ce conțin tiparul de căutare, va afișa numele fișierului ce conține acel text

 Exemple concrete:
grep cal cuvinte              = va căuta cuvântul cal în fișierul cuvinte
grep cal Desktop/*        = caută tiparul de căutare (cal) în toate fișierele din directorul Desktop
grep -in cal Desktop/*   = va include la rezultate cuvintele indiferent că sunt scrise cu majuscule sau minuscule și va arăta numărul liniilor din fișierele ce conțin tiparul


grep -Eiw "cal|dor" cuvinte = va căuta 2 sau mai multe cuvinte în fișierul dat, termenii trebuie puși între ghilimele și separați de |
egrep -iwn "anonim|dumnezeu|wilde" Desktop/*  = egrep e similar cu grep -E, vă amintiți?, comanda va căuta 3 termeni în toate fișierele directorului Desktop, fiind indicat și numărul liniiilor
egrep -l "cal|dor|anonim|dumnezeu|wilde|acasă" Desktop/*   = va afișa numele fișierelor ce conțin termenii de căutare

grep -in "adevărul este rareori pur" Poante  = putem căuta popoziții întregi
zgrep -i "tot ce e bun" Poante.zip  =putem căuta direct în arhive .zip
zgrep --color -i "tot ce e bun" Poante.zip  = după cum ați observat, comanda precedentă nu avea marcat stringul găsit cu o altă culoare, opțiunea --color va face aceasta. Faptul că-n imagini vedeți marcate expresiile găsite cu roșu se datorează unor aliasuri din .bashrc, cel cu zgrep fiind comentat special pentru a vedea diferența:
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
alias zgrep='zgrep --color=auto'


Un comentariu:

Back to top