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, veți afla câteva exemple care vă vor ajuta să înțelegeți comanda grep.
01 din 09Cum să căutați un șir într-un fișier utilizând GREP
Imaginați-vă că aveți un fișier text numit cărți cu următoarele titluri pentru copii:
- Robin Hood
- Scufita Rosie
- Peter Pan
- Goldilocks si cei trei ursi
- Alba ca Zapada si cei sapte pitici
- Pinnochio
- Pisica in palarie
- Cei trei purcelusi
- Gruffalo
- Charlie si fabrica de ciocolata
Pentru a găsi toate cărțile cu cuvântul "The" din titlu, ați folosi următoarea sintaxă:
Grep cărțileUrmătoarele rezultate vor fi returnate:
- Goldilocks si cei trei ursi
- Alba ca Zapada si cei sapte pitici
- Pisica in palarie
- Cei trei purcelusi
- Gruffalo
- Charlie si fabrica de ciocolata
În fiecare caz, cuvântul "The" va fi evidențiat.
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 primireDe asemenea, puteți utiliza comutatorul -i după cum urmează:
Continuați să citiți mai jos
02 din 09Că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:
aberdeenAberystwythAberlourInverurieinvernessNewburghcerb noinou gallowayglasgowedinburghDacă doriți să găsiți toate locațiile cu invers în nume, utilizați următoarea sintaxă:
grep inver * placesMarcajul cu asterisc (*) reprezintă 0 sau mai multe. Prin urmare, dacă aveți un loc numit inver sau un loc numit Inverness, atunci 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 locuriComanda 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
- linux.about.com
- pcsupport.about.com
- mp3.about.com
- minecraft.about.com
- androidgames.about.com
- netforbeginners.about.com
- everydaylinuxuser.com
- google.co.uk
- google.au
- direct.gov.uk
Pentru a găsi toate comenzile .com pe care le puteți căuta folosind următoarea sintaxă:
grep * despre * nume de domeniiComanda de mai sus s-ar prăbuși dacă lista conținea următorul nume:
- everydaylinuxuser.com/about.html
Prin urmare, puteți încerca următoarea sintaxă:
grep * names.com despre domeniiAcest lucru ar funcționa ok dacă nu există un domeniu cu următorul nume:
aboutycom.comPentru 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 .comMasta finală pentru a vă arăta este semnul întrebării care reprezintă zero sau un caracter.
De exemplu:
grep? er placenamesComanda de mai sus ar reveni aberdeen, aberystwyth sau chiar berwick.
Continuați să citiți mai jos
03 din 09Că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ă:
- Blackpool
- Liverpool
- orasul Manchester
- Orașul Leicester
- Manchester United
- Newcastle United
- FC United din Manchester
Dacă doriți să găsiți toate echipele care au început cu Manchester, ați folosi următoarea sintaxă:
grep ^ echipele din ManchesterComanda 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 se va întoarce la Manchester United și Newcastle United, dar nu la FC United Manchester.
04 din 09Numă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 intrareDacă modelul a fost dublat de două ori, numărul 2 va fi returnat.
Continuați să citiți mai jos
05 din 09Gă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ă:
- aberdeen Scoția
- glasgow Scoția
- liverpool Anglia
- Colwyn Bay
- Londra, Anglia
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 $ locuriRezultatele 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 $ locurileAceasta ar găsi toate locurile care nu au sfârșit cu pământul.
06 din 09Cum 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ă:
- aberdeen scotland
- scotlandul de inconștiență
- liverpool england
- Colwyn Bay Wales
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 ^ $ locuriDin 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 ^ $ locuriCu 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 ^ $ locuriContinuați să citiți mai jos
07 din 09Cum 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 'A-Z'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 "a-z" nume de fișierDacă 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 09Privind 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ă:
- 055-1234
- 055-4567
- 555-1545
- 444-0167
- 444-0854
- 4549-2234
- x44-1234
Ș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 -" numereDupă 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 } -" numereSlash-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.
Continuați să citiți mai jos
09 din 09Utilizarea 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 -efToate 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 firefoxrezumat
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.