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
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țile
Urmă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.
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
- 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 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:
- everydaylinuxuser.com/about.html
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ă:
- 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 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ă:
- aberdeen scotland
- glasgow scotland
- liverpool england
- 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 $ 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ă:
- 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 ^ $ 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ă:
- 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] -" 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