Despre Linux

  • Facebook
  • Twitter
  • LinkedIn
  • Acasă
  • Linux
    • Comenzi Linux
    • Tutoriale
  • Kubernetes
  • RHCSA
    • Exerciții RHCSA
    • SELinux
    • Permisiuni
  • General
    • Open source
  • Contact

Filtrarea textului în Linux: comanda grep

10 decembrie 2016 By Bobses 8 comentarii

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.

Partajează asta:

  • Dă clic pentru a partaja pe Facebook(Se deschide într-o fereastră nouă)
  • Dă clic pentru a partaja pe LinkedIn(Se deschide într-o fereastră nouă)
  • Dă clic pentru a partaja pe Twitter(Se deschide într-o fereastră nouă)

Similare

Din categoria: Comenzi Linux Etichete: comenzi Linux, expresii regulate, filtrare, grep, linie de comanda, linux

Comentarii

  1. Cipy a zis

    11 decembrie 2016 la ora 11:50

    Sugestie! nu posta mai mult de un articol pe zi.

    Răspunde
    • Bobses a zis

      11 decembrie 2016 la ora 11:52

      Postez și eu când am timp. 🙂 Uneori trec câteva zile fără să scriu nimic...

      Răspunde
      • Cipy a zis

        11 decembrie 2016 la ora 16:38

        Pai aici e problema, ca sunt zile cand nu gasesc niciun articol si parasesc site-ul dezamagit 🙂

        Răspunde
        • Bobses a zis

          11 decembrie 2016 la ora 16:59

          Am să încerc să scriu mai des, dar nu promit că voi și reuși. 🙂

          Răspunde
      • Cipy a zis

        11 decembrie 2016 la ora 23:08

        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 🙂

        Răspunde
        • Bobses a zis

          12 decembrie 2016 la ora 7:08

          Am mai vrut să fac asta, dar nu mi-a reușit. 🙂

          Răspunde

Trackbacks

  1. Certificarea RHCSA - prezentare și obiective | Despre Linux spune:
    8 iulie 2018 la 12:28

    […] Use grep and regular expressions to analyze text […]

    Răspunde
  2. Despre Linux – Vizualizarea individuală a informațiilor în Linux. Comanda getent spune:
    30 august 2017 la 8:08

    […] cele mai multe ori este folosită comanda grep pentru a căuta înregistrări specifice într-un […]

    Răspunde

Lasă un răspuns Anulează răspunsul

Acest site folosește Akismet pentru a reduce spamul. Află cum sunt procesate datele comentariilor tale.

Copyright © 2023 · Bobses

Administrează consimțămintele pentru cookie-uri
Pentru a oferi cea mai bună experiență, folosim tehnologii, cum ar fi cookie-uri, pentru a stoca și/sau accesa informațiile despre dispozitive. Consimțământul pentru aceste tehnologii ne permite să procesăm date, cum ar fi comportamentul de navigare sau ID-uri unice pe acest site. Dacă nu îți dai consimțământul sau îți retragi consimțământul dat poate avea afecte negative asupra unor anumite funcționalități și funcții.
Funcționale Mereu activ
Stocarea tehnică sau accesul sunt strict necesare în scopul legitim de a permite utilizarea unui anumit serviciu cerut în mod explicit de către un abonat sau un utilizator sau în scopul exclusiv de a executa transmiterea unei comunicări printr-o rețea de comunicații electronice.
Preferințe
Stocarea tehnică sau accesul este necesară în scop legitim pentru stocarea preferințelor care nu sunt cerute de abonat sau utilizator.
Statistici
Stocarea tehnică sau accesul care sunt utilizate exclusiv în scopuri statistice. The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.
Marketing
Stocarea tehnică sau accesul sunt necesare pentru a crea profiluri de utilizator pentru a trimite publicitate sau pentru a urmări utilizatorul pe un site web sau pe mai multe site-uri web în scopuri de marketing similare.
Administrează opțiunile Administrează serviciile Administrează vânzătorii Citește mai multe despre aceste scopuri
Vizualizează preferințele
{title} {title} {title}