Comanda grep
este extrem de folositoare. Cu ajutorul ei se poate căuta într-un fișier text linie cu linie după un anumit șir de caractere (care poate fi specificat și prin intermediul unei expresii regulate) și afișa liniile care conțin acel șablon (pattern) indicat.
Sintaxa comenzii grep este următoarea:
grep [opțiuni] regexp [fișiere]
- opțiunile comenzii - în cadrul articolului voi prezenta o parte din opțiuni;
- regexp - șablonul specificat printr-o expresie regulată, așa cum am prezentat în articolul anterior;
- fișiere - numele fișierelor în care se va executa comanda grep; dacă nu există, grep va lucra cu ceea ce primește de la o altă comandă (pipe).
Pentru exemplificare vom folosi un fișier generat de noi. Să presupunem că vrem să aplicăm anumite filtre pe mesajele de la inițializarea procesului de bootare a sistemului nostru. În terminal scriem următoarea comandă:
dmesg > mesaje-boot.txt
Comanda de mai sus scrie în fișierul mesaje-boot.txt toate mesajele de după inițializarea kernelului (acele mesaje rapide care vă apar când deschideți sistemul vostru Linux) și care pot oferi informații prețioase refitoare la erorile apărute în timpul procesului de bootare. Aici (click) este fișierul cu care am lucrat eu.
Căutarea unui cuvânt în text
Cea mai simplă formă a comenzii grep este grep șablon nume_fișier.txt
:
grep NVidia mesaje-boot.txt
Comanda de mai sus îmi va afișa toate liniile din fișierul mesaje-boot.txt care conțin șirul de caractere NVidia:
Afișarea numărului de potriviri
Uneori este deosebit de util să știm câte linii îndeplinesc un anumit criteriu (contorizarea numărului de potriviri). Pentru aceasta vom folosi comanda grep
opțiunea -c
(count):
$ grep -c NVidia mesaje-boot.txt
4
Afișarea numărului liniilor unde se întâlnesc potrivirile
Pentru a afișa numărul liniilor unde întâlnim o anumită potrivire (va mai ușor la editarea ulterioară a fișierului în cazul rezolvării unei anumite erori) vom folosi opțiunea -n
:
grep -n NVidia mesaje-boot.txt
Căutarea unui anumit cuvânt
Dacă vrem să căutăm strict un anumit cuvânt vom folosi comanda grep
cu opțiunea -w
:
grep -w "DMA" mesaje-boot.txt
În imaginea de mai jos se observă diferența dintre comanda grep
cu opțiunea -w
și fără această opțiune:
Căutarea recursivă cu grep
Dacă ne aflăm într-un director și vrem să căutăm un anumit șablon în toate fișierele text din directorul curent și din subdirectoare vom folosi opțiunea -r sau -R:
grep -r "șablon" *
În loc de grep -r
se poate folosi și rgrep
.
Ignorare litere mari/mici
Linux este un sistem de operare case sensitive, adică face diferența dintre litere mari și litere mici. Pentru a-i spune comenzii grep să ignore literele mari și cele mici, vom folosi opțiunea -i
(ignore case):
grep -i nvidia mesaje-boot.txt
Căutarea cu expresii regulate
Dacă folosim expresii regulate pentru a construi șablonul căutat, trebuie să-i indicăm acest lucru comenzii grep cu opțiunea -E
:
grep -E 'expresie-regulată'
În loc de grep -E
se poate folosi egrep
:
egrep 'expresie-regulată'
Căutarea a două cuvinte diferite
Vom folosi egrep ca mai jos:
egrep -w 'cuvânt1|cuvânt2' fișier
Da, e posibil și așa ceva: cu opțiunea -v vor fi afișate liniile care NU conțin șablonul indicat!
grep -v NVidia mesaje-boot.txt
Comanda de mai sus ne va afișa o mulțime de linii care nu conțin șirul de caractere NVidia.
Folosirea comenzii grep la ieșirea altei comenzi
În acest caz, comanda grep va lucra cu ceea ce rezultă după executarea primei comenzi .
Comanda de mai jos de va afișa toate informațiile referitoare la hard disc și partiții (sdax sau hdax) din mesajele de la bootare:
dmesg | egrep '(s|h)d[a-z]'
Afișarea modelului procesorului:
cat /proc/cpuinfo | grep -i 'Model'
Aflarea informațiilor despre rețea (adresa IP, masca de rețea):
ifconfig | grep -w 'inet'
Căutarea prin fișiere care conțin un anumit șablon
Vom folosi comanda grep cu opțiunea -l
pentru a afișa toate fișierele care conțin un anumit cuvânt:
grep -l 'main' *.c
Comanda de mai sus va afișa toate numele de fișiere cu extensia .c și care conțin cuvântul main.
Afișarea în culori a ieșirii
Cu opțiunea --color
putem foța comanda grep să ne afișeze colorat un anumit cuvânt. Mai jos am căutat bobses în fișierul /etc/passwd:
grep --color bobses /etc/passwd
Căutarea unui șir într-o arhivă
Vom folosi zgrep în forma următoare:
zgrep –i error /var/log/syslog.2.gz
Căutarea unui anumit proces în lista de procese
Putem afla exact ce ID are un anumit proces, fără a afișa întreaga listă de procese. Comanda următoare transmite către grep toată lista proceselor care rulează, iar grep va afișa doar pe cel care ne interesează:
ps ax | grep apache2
Acestea sunt doar câteva opțiuni suportate de comanda grep. exemplele date pot fi folosite d eîncepători pentru a căuta în interiourl fișierelor (și nu numai). Comanda grep își arată valoarea folosită cu expresii regulate, dar asta implică ceva mai multă experiență. Pentru a afla mai multe informații despre grep și opțiunile sale folosiți cu încredere man grep
.
Într-un articol viitor voi vorbi despre altă comandă puternică pentru filtrarea fișierelor: comanda sed
.
Cipy a zis
Sugestie! nu posta mai mult de un articol pe zi.
Bobses a zis
Postez și eu când am timp. 🙂 Uneori trec câteva zile fără să scriu nimic...
Cipy a zis
Pai aici e problema, ca sunt zile cand nu gasesc niciun articol si parasesc site-ul dezamagit 🙂
Bobses a zis
Am să încerc să scriu mai des, dar nu promit că voi și reuși. 🙂
Cipy a zis
poti sa scrii si 10 articole intr-o zi, dar sa postezi numai unul, astfel in fiecare zi vei avea cate un articol, si imlicit si vizitatori in fiecare zi 🙂
Bobses a zis
Am mai vrut să fac asta, dar nu mi-a reușit. 🙂