Linux egrep command

Updated: 03/13/2021 de Computer Hope

Pe sistemele de operare de tip Unix, comanda egrep caută un model de text, folosind expresii regulate extinse pentru a efectua potrivirea. Rularea egrep este echivalentă cu rularea grep cu opțiunea -E.

Această pagină acoperă versiunea GNU/Linux a egrep.

Sintaxa

egrep PATTERN 

Opțiuni

-A NUM,
–after-context=NUM
Imprimă NUM linii de context de urmă după liniile de potrivire. Plasează o linie care conține — între grupuri contigue de potriviri.
-a, –text Procesează un fișier binar ca și cum ar fi text; este echivalent cu opțiunea –binary-files=text.
-B NUM,
–before-context=NUM
Imprimă NUM linii de context de început înainte de liniile de potrivire. Plasează o linie care conține — între grupuri contigue de potriviri.
-C NUM, –context=NUM Imprimă NUM linii de context de ieșire. Plasează o linie care conține — între grupurile contigue de potriviri.
-b, –byte-offset Imprimă decalajul de octeți din fișierul de intrare înainte de fiecare linie de ieșire.
–binary-files=TYPE Dacă primii câțiva octeți ai unui fișier indică faptul că fișierul conține date binare, se presupune că fișierul este de tip TYPE. În mod implicit, TYPE este binar, iar grep emite în mod normal fie un mesaj de o linie care spune că un fișier binar se potrivește, fie niciun mesaj dacă nu există nicio potrivire. Dacă TYPE este without-match, grep presupune că un fișier binar nu se potrivește; acest lucru este echivalent cu opțiunea -I. Dacă TYPE este text, grep procesează un fișier binar ca și cum ar fi text; acest lucru este echivalent cu opțiunea -a. Atenție: grep –binary-files=text ar putea emite gunoaie binare, ceea ce poate avea efecte secundare neplăcute dacă ieșirea este un terminal și dacă driverul terminalului interpretează unele dintre ele ca fiind comenzi.
–colour,
–color
Înconjoară șirul de caractere care se potrivește cu markerul find în variabila de mediu GREP_COLOR. WHEN poate fi „never” (niciodată), „always” (întotdeauna) sau „auto”
-c, –count Suprimați ieșirea normală; în schimb, imprimați un număr de linii corespunzătoare pentru fiecare fișier de intrare. Cu opțiunea -v, –invert-match (vezi mai jos), numărați liniile care nu corespund.
-D ACTION,
–devices=ACTION
Dacă un fișier de intrare este un dispozitiv, FIFO sau socket, utilizați ACTION pentru a-l procesa. În mod implicit, ACTION este read, ceea ce înseamnă că dispozitivele sunt citite ca și cum ar fi fișiere obișnuite. Dacă ACTION este skip, dispozitivele sunt sărite silențios.
-d ACTION,
–directories=ACTION
Dacă un fișier de intrare este un director, utilizați ACTION pentru a-l procesa. În mod implicit, ACTION este read, ceea ce înseamnă că directoarele sunt citite ca și cum ar fi fișiere obișnuite. Dacă ACTION este skip, directoarele sunt sărite în mod silențios. Dacă ACTION este recurse, grep citește toate fișierele din fiecare director, în mod recursiv; acest lucru este echivalent cu opțiunea -r.
-e PATTERN,
–regexp=PATTERN
Utilizați PATTERN ca model; util pentru a proteja modelele care încep cu „-„.
-F, –fixed-strings Interpretați PATTERN ca o listă de șiruri fixe, separate prin linii noi, care pot fi potrivite.
-P, –perl-regexp Interpretează PATTERN ca o expresie regulată Perl.
-f FILE, –file=FILE Obține modele din FILE, unul pe linie. Fișierul gol conține zero modele și, prin urmare, nu se potrivește cu nimic.
-G, –basic-regexp Interpretează PATTERN ca expresie regulată de bază (a se vedea mai jos). Aceasta este valoarea implicită.
-H, –with-filename Imprimă numele fișierului pentru fiecare potrivire.
-h, –no-filename Suprimați prefixarea numelor de fișiere la ieșire atunci când sunt căutate mai multe fișiere.
–help Emiteți un scurt mesaj de ajutor.
-I Procesează un fișier binar ca și cum acesta nu ar conține date corespunzătoare; aceasta este echivalentă cu opțiunea –binary-files=without-match.
-i, –ignore-case Ignoră distincțiile de majuscule și minuscule atât în PATTERN cât și în fișierele de intrare.
-L,
–files-without-match
Suprimați ieșirea normală; în schimb, imprimați numele fiecărui fișier de intrare din care în mod normal nu s-ar tipări nicio ieșire. Scanarea se oprește la prima potrivire.
-l, –files-with-matches Suprimați ieșirea normală; în schimb, imprimați numele fiecărui fișier de intrare din care s-ar tipări în mod normal o ieșire. Scanarea se oprește la prima potrivire.
-m NUM,
–max-count=NUM
Încetează citirea unui fișier după NUM linii de potrivire. În cazul în care intrarea este o intrare standard dintr-un fișier obișnuit, iar la ieșire sunt afișate NUM linii de corespondență, grep se asigură că intrarea standard este poziționată după ultima linie de corespondență înainte de a ieși, indiferent de prezența liniilor de context din urmă. Acest lucru permite unui proces de apelare să reia o căutare. În cazul în care grep se oprește după NUM linii de corespondență, acesta emite orice linii de context care urmează. În cazul în care se utilizează și opțiunea -c sau –count, grep nu emite un număr mai mare decât NUM. Atunci când este utilizată și opțiunea -v sau –invert-match, grep se oprește după ce scoate NUM linii care nu corespund.
–mmap Dacă este posibil, utilizați apelul de sistem mmap pentru a citi intrările, în locul apelului de sistem implicit read. În unele situații, –mmap oferă performanțe mai bune. Cu toate acestea, –mmap poate provoca un comportament nedefinit (inclusiv goluri de nucleu) dacă un fișier de intrare se micșorează în timp ce grep funcționează sau dacă apare o eroare de intrare/ieșire.
-n, –line-number Prefixează fiecare linie de ieșire cu numărul liniei din fișierul de intrare.
-o, –only-matching Afișează numai partea dintr-o linie care se potrivește cu PATTERN.
–label=LABEL Afișează intrarea care vine de fapt de la intrarea standard ca intrare provenind din fișierul LABEL. Acest lucru este util în special pentru instrumente precum zgrep, de exemplu, gzip -cd foo.gz |grep -H –label=foo ceva
–line-buffered Utilizați bufferizarea liniei. Acest lucru poate atrage o penalizare de performanță.
-q, –quiet, –silent Să fie liniștit; nu scrieți nimic pe ieșirea standard. Ieșiți imediat cu starea zero dacă se găsește vreo potrivire, chiar dacă a fost detectată o eroare. A se vedea, de asemenea, opțiunea -s sau –no-messages.
-R, -r, –recursive Citește toate fișierele din fiecare director, recursiv; aceasta este echivalentă cu opțiunea -d recurse. Modificat de:
–include=PATTERN
Recurge în directoare căutând numai fișierele care se potrivesc cu PATTERN.
–exclude=PATTERN
Recurge în directoare omițând fișierele care se potrivesc cu PATTERN.
-s, –no-messages Suprimă mesajele de eroare despre fișierele inexistente sau ilizibile. Notă de portabilitate: spre deosebire de GNU grep, grep tradițional nu era conform cu POSIX.2, deoarece grep tradițional nu avea o opțiune -q, iar opțiunea -s se comporta ca opțiunea -q a lui GNU grep. Scripturile shell destinate să fie portabile cu grep tradițional ar trebui să evite atât -q cât și -s și ar trebui să redirecționeze în schimb ieșirea către /dev/null.
-U, –binary Tratează fișierul (fișierele) ca fiind binar(e). În mod implicit, în MS-DOS și Microsoft Windows, grep ghicește tipul de fișier uitându-se la conținutul primilor 32 KB citiți din fișier. Dacă grep decide că fișierul este un fișier text, acesta elimină caracterele CR din conținutul original al fișierului (pentru ca expresiile regulate cu ^ și $ să funcționeze corect). Specificarea lui -U anulează această presupunere, făcând ca toate fișierele să fie citite și transmise textual mecanismului de potrivire; dacă fișierul este un fișier text cu perechi CR/LF la sfârșitul fiecărei linii, acest lucru face ca unele expresii regulate să eșueze. Această opțiune nu are niciun efect pe alte platforme decât MS-DOS și MS-Windows.
-u, –unix-byte-offsets Raportează decalajele de octeți în stil Unix. Acest comutator face ca grep să raporteze decalajele de octeți ca și cum fișierul ar fi un fișier text în stil Unix, adică cu caracterele CR eliminate. Aceasta produce rezultate identice cu rularea grep pe o mașină Unix. Această opțiune nu are efect decât dacă se folosește și opțiunea -b; nu are efect pe alte platforme decât MS-DOS și MS-Windows.
-V, –version Imprimă numărul de versiune al grep pe eroarea standard. Acest număr de versiune trebuie inclus în toate rapoartele de erori (vezi mai jos).
-v, –invert-match Inversează sensul potrivirii, pentru a selecta liniile care nu se potrivesc.
-w, –word-regexp Selectează numai acele linii care conțin potriviri care formează cuvinte întregi. Testul constă în faptul că subșirul care se potrivește trebuie să se afle fie la începutul liniei, fie să fie precedat de un caracter constitutiv care nu este un cuvânt. În mod similar, trebuie să se afle fie la sfârșitul liniei, fie să fie urmată de un caracter constitutiv care nu este un cuvânt. Caracterele constitutive de cuvânt sunt literele, cifrele și liniuța de subliniere.
-x, –line-regexp Selectează numai acele corespondențe care se potrivesc exact cu întreaga linie.
-y Sinonim învechit pentru -i.
-Z, –null Emite un octet zero (caracterul ASCII NULL) în locul caracterului care urmează în mod normal după un nume de fișier. De exemplu, grep -lZ scoate un octet zero după fiecare nume de fișier în loc de linia nouă obișnuită. Această opțiune face ca ieșirea să fie lipsită de ambiguitate, chiar și în prezența unor nume de fișiere care conțin caractere neobișnuite, cum ar fi liniile noi. Această opțiune poate fi utilizată cu comenzi precum find -print0, perl -0, sort -z și xargs -0 pentru a procesa nume de fișiere arbitrare, chiar și cele care conțin caractere newline.

Expresii regulate

O expresie regulată este un model care descrie un set de șiruri de caractere. Expresiile regulate sunt construite în mod analog cu expresiile aritmetice, folosind diverși operatori pentru a combina expresii mai mici.

Grep înțelege două versiuni diferite de sintaxă a expresiilor regulate: „de bază” și „extinsă”. În GNU grep, nu există nicio diferență în ceea ce privește funcționalitatea disponibilă folosind ambele sintaxe. În alte implementări, expresiile regulate de bază sunt mai puțin puternice. Următoarea descriere se aplică expresiilor regulate extinse, care sunt utilizate în egrep; diferențele pentru expresiile regulate de bază sunt rezumate ulterior.

Blocurile de construcție fundamentale sunt expresiile regulate care se potrivesc cu un singur caracter. Majoritatea caracterelor, inclusiv toate literele și cifrele, sunt expresii regulate care se potrivesc singure. Orice metacaracter cu semnificație specială poate fi citat, precedându-l cu o backslash.

O expresie între paranteze este o listă de caractere închisă prin . Aceasta se potrivește cu orice caracter unic din lista respectivă; dacă primul caracter din listă este semnul ^, atunci se potrivește cu orice caracter care nu se află în listă. De exemplu, expresia regulată se potrivește cu orice cifră unică.

În cadrul unei expresii între paranteze, o expresie de interval constă din două caractere separate de o cratimă („-„). Aceasta se potrivește cu orice caracter unic care se clasează între cele două caractere, inclusiv, folosind secvența de colaționare și setul de caractere din locale. De exemplu, în locația implicită C, este echivalent cu . Multe locale sortează caracterele în ordinea dicționarului și, în aceste locale, deseori nu este echivalent cu ; poate fi echivalent cu , de exemplu. Pentru a obține interpretarea tradițională a expresiilor în paranteze, puteți utiliza locale C prin setarea variabilei de mediu LC_ALL la valoarea C.

În cele din urmă, anumite clase de caractere denumite sunt predefinite în cadrul expresiilor în paranteze, după cum urmează. Numele lor sunt autoexplicative și sunt , , , , , , , , , , , , , și . De exemplu, ] înseamnă , , cu excepția celei din urmă forme care depinde de locale C și de codificarea caracterelor ASCII, în timp ce prima este independentă de locale și de setul de caractere. (Rețineți că parantezele din aceste nume de clase fac parte din numele simbolice și trebuie incluse în plus față de parantezele care delimitează lista de paranteze). Majoritatea metacaracterelor își pierd semnificația specială în interiorul listelor. Pentru a include un literal ], plasați-l primul în listă. În mod similar, pentru a include un literal ^, plasați-l oriunde, mai puțin primul. În cele din urmă, pentru a include un literal – puneți-l ultimul.

Punctul . se potrivește cu orice caracter unic. Simbolul \w este un sinonim pentru ] și \W este un sinonim pentru ].

Semnătura ^ și semnul dolar („$”) sunt metacaractere care se potrivesc cu șirul gol la începutul și, respectiv, la sfârșitul unei linii. Simbolurile \< și \> se potrivesc cu șirul gol la începutul și, respectiv, la sfârșitul unui cuvânt. Simbolul \b se potrivește cu șirul gol la marginea unui cuvânt, iar \B se potrivește cu șirul gol cu condiția ca acesta să nu se afle la marginea unui cuvânt.

O expresie regulată poate fi urmată de unul dintre mai mulți operatori de repetiție:

? Elementul precedent este opțional și se potrivește cel mult o dată.
* Elementul precedent se va potrivi de zero sau mai multe ori.
+ Elementul precedent se va potrivi de una sau mai multe ori.
{n} Elementul precedent se potrivește exact de n ori.
{n,} Elementul precedent se potrivește de n sau mai multe ori.
{n,m} Elementul precedent se potrivește de cel puțin n ori, dar nu mai mult de m ori.

Două expresii regulate pot fi concatenate; expresia regulată rezultată se potrivește cu orice șir de caractere format prin concatenarea a două subșiruri care se potrivesc respectiv cu subexpresiile concatenate.

Două expresii regulate pot fi unite prin operatorul infix |; expresia regulată rezultată se potrivește cu orice șir de caractere care se potrivește cu oricare dintre subexpresii.

Repetiția are prioritate față de concatenare, care, la rândul ei, are prioritate față de alternanță. O subexpresie întreagă poate fi închisă între paranteze pentru a anula aceste reguli de precedență.

Retrospectiva \n, unde n este o singură cifră, se potrivește cu subșirul de caractere care a fost anterior potrivit cu a n-a subexpresie a expresiei regulate între paranteze.

În expresiile regulate de bază, metacaracterele ?, +, {, |, (, și ) își pierd semnificația specială; în schimb, se folosesc versiunile backslashhed \?, \+, \{, \|, \(, și \).

Gegrep tradițional nu suporta metacaracterul {, iar unele implementări egrep suportă în schimb \{, astfel încât scripturile portabile ar trebui să evite { în tiparele egrep și ar trebui să folosească pentru a se potrivi un literal {.

GNU egrep încearcă să suporte utilizarea tradițională presupunând că { nu este special dacă ar fi începutul unei specificații de interval invalid. De exemplu, comanda de shell egrep „{1” caută șirul de două caractere {1 în loc să raporteze o eroare de sintaxă în expresia regulată. POSIX.2 permite acest comportament ca o extensie, dar scripturile portabile ar trebui să îl evite.

Variabile de mediu

Comportamentul lui Grep este afectat de următoarele variabile de mediu:

Un locale LC_foo este specificat prin examinarea celor trei variabile de mediu LC_ALL, LC_foo, LANG, în această ordine. Prima dintre aceste variabile care este setată specifică locale. De exemplu, dacă LC_ALL nu este setată, dar LC_MESSAGES este setată la pt_BR, atunci se utilizează portugheza braziliană pentru locale LC_MESSAGES. Se utilizează locale C dacă niciuna dintre aceste variabile de mediu nu este setată, sau dacă nu este instalat catalogul de locale, sau dacă grep nu a fost compilat cu suportul de limbă națională (NLS).

GREP_OPTIONS

Această variabilă specifică opțiunile implicite care trebuie plasate în fața oricăror opțiuni explicite. De exemplu, dacă GREP_OPTIONS este ‘–binary-files=without-match –directories=skip’, grep se comportă ca și cum cele două opțiuni –binary-files=without-match și –directories=skip ar fi fost specificate înaintea oricăror opțiuni explicite. Specificațiile opțiunilor sunt separate prin spații albe. O backslash scapă caracterul următor, astfel încât poate fi utilizată pentru a specifica o opțiune care conține spații albe sau o backslash.

GREP_COLOR

Specifică marcajul pentru evidențiere.

LC_ALL, LC_COLLATE, LANG

Aceste variabile specifică locația LC_COLLATE, care determină secvența de colaționare utilizată pentru interpretarea expresiilor de tip interval, cum ar fi .

LC_ALL, LC_CTYPE, LANG

Aceste variabile specifică locația LC_CTYPE, care determină tipul de caractere, de ex, ce caractere sunt spații albe.

LC_ALL, LC_MESSAGES, LANG

Aceste variabile specifică locale LC_MESSAGES, care determină limba pe care grep o folosește pentru mesaje. Locația implicită C folosește mesaje în engleză americană.

POSIXLY_CORRECT

Dacă este setat, grep se comportă așa cum cere POSIX.2; în caz contrar, grep se comportă mai mult ca alte programe GNU. POSIX.2 cere ca opțiunile care urmează după nume de fișiere să fie tratate ca nume de fișiere; în mod implicit, astfel de opțiuni sunt permutate în fața listei de operanzi și sunt tratate ca opțiuni. De asemenea, POSIX.2 cere ca opțiunile nerecunoscute să fie diagnosticate ca fiind „ilegale”, dar, deoarece acestea nu sunt cu adevărat împotriva legii, în mod implicit sunt diagnosticate ca fiind „invalide”. POSIXLY_CORRECT dezactivează, de asemenea, _N_GNU_nonoption_argv_flags_, descrisă mai jos.

_N_GNU_nonoption_argv_flags_

(Aici N este ID-ul numeric al procesului grep.) Dacă al i-lea caracter al valorii acestei variabile de mediu este 1, nu considerați al i-lea operand al grep ca fiind o opțiune, chiar dacă pare a fi una. Un shell poate plasa această variabilă în mediu pentru fiecare comandă pe care o execută, specificând care operanzi sunt rezultatele expansiunii caracterelor wildcard ale numelui de fișier și, prin urmare, nu trebuie tratați ca opțiuni. Acest comportament este disponibil numai cu biblioteca GNU C și numai atunci când POSIXLY_CORRECT nu este setat.

Exemple

egrep "support|help|windows" myfile.txt

Cercetați modele de ajutor de asistență și ferestre în fișierul myfile.txt.

egrep '^+$' myfile.txt

Cercetați orice linii din myfile.txt care încep o linie cu un cuvânt alfabetic care, de asemenea, termină linia.

egrep -c '^begin|end$' myfile.txt

Contează numărul de linii din myfile.txt care încep cu cuvântul „begin” sau se termină cu cuvântul „end”.

fgrep – Filtrează textul care se potrivește cu un șir de caractere fixe.
grep – Filtrează textul care se potrivește cu o expresie regulată.
sed – Un utilitar pentru filtrarea și transformarea textului.
sh – Interpretorul de comenzi Bourne shell.

.

Lasă un răspuns

Adresa ta de email nu va fi publicată.