Exemplu de utilizare a comenzii grep Linux

Introducere

Comanda Linux grep este folosită ca metodă pentru filtrarea intrărilor.

GREP este o imprimantă Global Regular Expression Printer și, prin urmare, pentru ao folosi eficient, ar trebui să aveți cunoștințe despre expresiile regulate.

În acest articol, vă voi arăta câteva exemple care vă vor ajuta să înțelegeți comanda grep.

01 din 09

Cum să căutați un șir într-un fișier utilizând GREP

Comanda Linux grep.

Imaginați-vă că aveți un fișier text numit cărți cu următoarele titluri pentru copii:

Pentru a găsi toate cărțile cu cuvântul "The" din titlu, ați folosi următoarea sintaxă:

Grep cărțile

Următoarele rezultate vor fi returnate:

În fiecare caz, cuvântul "The" va fi evidențiat.

Rețineți că căutarea este sensibilă la minuscule, astfel încât dacă unul dintre titluri avea "în loc de" The "atunci nu ar fi fost returnat.

Pentru a ignora cazul, puteți adăuga următorul comutator:

grep cărțile - caz de primire

De asemenea, puteți utiliza comutatorul -i după cum urmează:

grep -i cărțile

02 din 09

Căutați o coardă într-un fișier utilizând caractere

Comanda grep este foarte puternică. Puteți utiliza o multitudine de tehnici de potrivire a modelelor pentru a filtra rezultatele.

În acest exemplu, vă voi arăta cum să căutați un șir într-un fișier folosind metacaractere .

Imaginați-vă că aveți un fișier numit locații cu următoarele nume de locație din Scoția:

aberdeen

Aberystwyth

Aberlour

Inverurie

inverness

Newburgh

cerb noi

nou galloway

glasgow

edinburgh

Dacă doriți să găsiți toate locațiile cu invers în nume, utilizați următoarea sintaxă:

grep inver * places

Marcajul cu asterisc (*) reprezintă 0 sau mai multe. Prin urmare, dacă aveți un loc numit invers sau un loc numit inversiune, ambele ar fi returnate.

O altă caracteristică pe care o puteți utiliza este perioada (.). Puteți utiliza aceasta pentru a se potrivi cu o singură literă.

grep inv.r locuri

Comanda de mai sus ar găsi locuri numite inverse și inverse, dar nu ar găsi invereerie, deoarece nu poate fi decât un wildcard între cele două r, așa cum este indicat de perioada unică.

Mărimea perioadei este utilă, dar poate provoca probleme dacă aveți parte ca parte a textului pe care îl căutați.

De exemplu, uitați-vă la această listă de nume de domenii

Pentru a găsi toate cele despre.com puteți căuta folosind următoarea sintaxă:

grep * despre * nume de domenii

Comanda de mai sus s-ar prăbuși dacă lista conținea următorul nume:

Prin urmare, puteți încerca următoarea sintaxă:

grep * names.com despre domenii

Acest lucru ar funcționa ok dacă nu există un domeniu cu următorul nume:

aboutycom.com

Pentru a căuta cu adevărat termenul about.com, ar trebui să scăpați de punct după cum urmează:

grep * despre nume de domenii \ .com

Masta finală pentru a vă arăta este semnul întrebării care reprezintă zero sau un caracter.

De exemplu:

grep? er placenames

Comanda de mai sus ar reveni aberdeen, aberystwyth sau chiar berwick.

03 din 09

Căutați cuvintele de la începutul și sfârșitul liniei folosind grep

Caratul (^) și simbolul dolar ($) vă permit să căutați modele la începutul și la sfârșitul liniilor.

Imaginați-vă că aveți un fișier numit fotbal cu următoarele nume de echipă:

Dacă doriți să găsiți toate echipele care au început cu Manchester, ați folosi următoarea sintaxă:

grep ^ echipele din Manchester

Comanda de mai sus ar reveni Manchester City și Manchester United, dar nu FC United Manchester.

Alternativ, puteți găsi toate echipele care se termină cu United utilizând următoarea sintaxă:

grep United $

Comanda de mai sus ar reveni Manchester United și Newcastle United, dar nu FC United Manchester.

04 din 09

Numărarea numărului de meciuri Utilizând grep

Dacă nu doriți să întoarceți liniile reale care se potrivesc cu un model folosind grep, dar doriți doar să știți cât de multe există puteți folosi următoarea sintaxă:

grep -c patternfile de intrare

Dacă modelul a fost dublat de două ori, numărul 2 va fi returnat.

05 din 09

Găsirea tuturor termenilor care nu se potrivesc folosind grep

Imaginați-vă că aveți o listă de nume de locații cu țările listate după cum urmează:

S-ar putea să fi observat că Golful Colwyn nu are nici o țară asociată cu ea.

Pentru a căuta toate locațiile cu o țară, puteți folosi următoarea sintaxă:

grep terenuri $ locuri

Rezultatele se vor întoarce toate locurile, cu excepția golful colwyn.

Acest lucru este evident numai pentru locurile care se termină în pământ (cu greu științific).

Puteți inversa selecția utilizând următoarea sintaxă:

grep -v terenuri $ locurile

Aceasta ar găsi toate locurile care nu au sfârșit cu pământul.

06 din 09

Cum să găsiți linii goale în fișiere Utilizând grep

Imaginați-vă că aveți un fișier de intrare utilizat de o aplicație terță parte care oprește citirea fișierului atunci când găsește o linie goală după cum urmează:

Când aplicația ajunge la linia de după liverpool, se va opri citirea, ceea ce înseamnă că bara colwyn este ratată în întregime.

Puteți utiliza grep pentru a căuta linii goale cu următoarea sintaxă:

grep ^ $ locuri

Din păcate, acest lucru nu este deosebit de util, deoarece returnează liniile goale.

Ați putea obține, desigur, un număr de linii goale ca verificare pentru a vedea dacă fișierul este valabil după cum urmează:

grep -c ^ $ locuri

Cu toate acestea, ar fi mai util să cunoașteți numerele de linie care au o linie necompletată, astfel încât să le puteți înlocui. Puteți face acest lucru cu următoarea comandă:

grep -n ^ $ locuri

07 din 09

Cum să căutați un șir de caractere superioare sau minuscule folosind grep

Folosind grep puteți determina ce linii dintr-un fișier au caractere majusculă utilizând următoarea sintaxă:

grep '[AZ]'

Parantezele pătrate [] vă permit să determinați gama de caractere. În exemplul de mai sus se potrivește cu orice caracter care se află între A și Z.

Prin urmare, pentru a potrivi caractere minuscule, puteți utiliza următoarea sintaxă:

grep '[az]' nume de fișier

Dacă doriți să potriviți numai literele și nu numerice sau alte simboluri, puteți utiliza următoarea sintaxă:

grep '[a-zA-Z]'

Puteți face la fel cu numerele după cum urmează:

grep '[0-9]' nume fișier

08 din 09

Privind modele repetate Folosind grep

Puteți utiliza brațele {} pentru a căuta un model repetat.

Imaginați-vă că aveți un fișier cu numere de telefon după cum urmează:

Știți că prima parte a numărului trebuie să fie de trei cifre și doriți să găsiți liniile care nu se potrivesc cu acest model.

Din exemplul anterior, știi că [0-9] returnează toate numerele dintr-un fișier.

În acest caz vrem liniile care încep cu trei numere urmate de o cratimă (-). Puteți face acest lucru cu următoarea sintaxă:

grep "^ [0-9] [0-9] [0-9] -" numere

După cum știm din exemplele anterioare, caratul (^) înseamnă că linia trebuie să înceapă cu următorul model.

[0-9] va căuta orice număr între 0 și 9. Întrucât acest lucru este inclus de trei ori, acesta se potrivește cu 3 numere. În cele din urmă, există o cratimă care indică faptul că o cratimă trebuie să aibă succes în cele trei numere.

Folosind parantezele curbate puteți face căutarea mai mică, după cum urmează:

grep "^ [0-9] \ {3 \} -" numere

Slash-ul scapă din {bracket astfel încât acesta să funcționeze ca parte a expresiei regulate, dar în esență ceea ce spune acest lucru este [0-9] {3} ceea ce înseamnă orice număr între 0 și 9 de trei ori.

Parantezele curbate pot fi utilizate și după cum urmează:

{5,10}

{5}

{5,10} înseamnă că caracterul căutat trebuie repetat de cel puțin 5 ori, dar nu mai mult de 10, în timp ce {5,} înseamnă că caracterul trebuie repetat de cel puțin 5 ori, dar poate fi mai mult decât atât.

09 din 09

Utilizarea ieșirii din alte comenzi Utilizând grep

Până în prezent am analizat potrivirea modelului în fișierele individuale, dar grepul poate folosi ieșirea din alte comenzi ca intrare pentru potrivirea modelului.

Un exemplu excelent este utilizarea comenzii ps care afișează procesele active.

De exemplu, rulați următoarea comandă:

ps -ef

Toate procesele care rulează pe sistemul dvs. vor fi afișate.

Puteți utiliza grep pentru a căuta un anumit proces de rulare după cum urmează:

ps -ef | grep firefox

rezumat

Comanda grep este o comandă fundamentală Linux și este una care merită să înveți, deoarece vă va face mult mai ușor viața atunci când căutați fișiere și procese atunci când utilizați terminalul.