Sui sistemi operativi Unix-like, il comando egrep cerca un modello di testo, usando espressioni regolari estese per eseguire la corrispondenza. L’esecuzione di egrep è equivalente all’esecuzione di grep con l’opzione -E.
Questa pagina copre la versione GNU/Linux di egrep.
Sintassi
egrep PATTERN
Opzioni
-A NUM, –after-context=NUM |
Stampa NUM linee di contesto dopo le linee corrispondenti. Mette una linea contenente — tra gruppi contigui di corrispondenze. |
-a, –text | Elabora un file binario come se fosse testo; questo è equivalente all’opzione –binary-files=text. |
-B NUM, –before-context=NUM |
Stampa NUM linee di contesto iniziale prima delle linee corrispondenti. Mette una linea contenente — tra gruppi contigui di corrispondenze. |
-C NUM, –context=NUM | Stampa NUM linee di contesto in uscita. Mette una linea contenente — tra gruppi contigui di corrispondenze. |
-b, –byte-offset | Stampa l’offset di byte nel file di input prima di ogni linea di output. |
–binary-files=TYPE | Se i primi byte di un file indicano che il file contiene dati binari, assume che il file sia di tipo TYPE. Per impostazione predefinita, TYPE è binario, e grep normalmente produce un messaggio di una riga che dice che un file binario corrisponde, o nessun messaggio se non c’è corrispondenza. Se TYPE è without-match, grep assume che un file binario non corrisponda; questo è equivalente all’opzione -I. Se TYPE è text, grep processa un file binario come se fosse testo; questo è equivalente all’opzione -a. Attenzione: grep –binary-files=text potrebbe emettere spazzatura binaria, che può avere brutti effetti collaterali se l’output è un terminale e se il driver del terminale interpreta alcuni di essi come comandi. |
–colour, –color |
Contorna la stringa corrispondente con il marcatore find nella variabile d’ambiente GREP_COLOR. WHEN può essere ‘never’, ‘always’, o ‘auto’ |
-c, –count | Supprime il normale output; invece stampa un conteggio delle linee corrispondenti per ogni file di input. Con l’opzione -v, –invert-match (vedi sotto), conta le linee non corrispondenti. |
-D ACTION, –devices=ACTION |
Se un file di input è un dispositivo, FIFO o socket, usa ACTION per processarlo. Per impostazione predefinita, ACTION è read, il che significa che i dispositivi vengono letti come se fossero file ordinari. Se ACTION è skip, i dispositivi vengono silenziosamente saltati. |
-d ACTION, –directories=ACTION |
Se un file di input è una directory, usa ACTION per processarlo. Per impostazione predefinita, ACTION è read, il che significa che le directory vengono lette come se fossero file ordinari. Se ACTION è skip, le directory vengono saltate silenziosamente. Se ACTION è recurse, grep legge tutti i file sotto ogni directory, ricorsivamente; questo è equivalente all’opzione -r. |
-e PATTERN, –regexp=PATTERN |
Usa PATTERN come pattern; utile per proteggere i pattern che iniziano con “-“. |
-F, –fixed-strings | Interpreta PATTERN come una lista di stringhe fisse, separate da newlines, che possono essere abbinate. |
-P, –perl-regexp | Interpreta PATTERN come un’espressione regolare Perl. |
-f FILE, –file=FILE | Ottiene pattern da FILE, uno per riga. Il file vuoto contiene zero pattern, e quindi non corrisponde a nulla. |
-G, –basic-regexp | Interpreta PATTERN come espressione regolare di base (vedi sotto). Questo è il default. |
-H, –with-filename | Stampa il nome del file per ogni corrispondenza. |
-h, –no-filename | Sospende il prefisso dei nomi dei file in uscita quando vengono cercati più file. |
–help | Mostra un breve messaggio di aiuto. |
-I | Elaborare un file binario come se non contenesse dati corrispondenti; questo è equivalente all’opzione –binary-files=without-match. |
-i, –ignore-case | Ignorare le distinzioni di caso sia nel PATTERN che nei file di input. |
-L, –files-without-match |
Supprime il normale output; invece stampa il nome di ogni file di input da cui normalmente non verrebbe stampato alcun output. La scansione si ferma alla prima corrispondenza. |
-l, –files-with-matches | Supprime l’output normale; invece stampa il nome di ogni file di input da cui l’output verrebbe normalmente stampato. La scansione si ferma alla prima corrispondenza. |
-m NUM, –max-count=NUM |
Ferma la lettura di un file dopo NUM linee corrispondenti. Se l’input è l’input standard di un file regolare, e vengono emesse NUM linee corrispondenti, grep assicura che lo standard input sia posizionato dopo l’ultima linea corrispondente prima di uscire, indipendentemente dalla presenza di linee di contesto in coda. Questo permette ad un processo chiamante di riprendere la ricerca. Quando grep si ferma dopo NUM linee corrispondenti, emette qualsiasi linea di contesto in uscita. Quando viene usata anche l’opzione -c o –count, grep non emette un conteggio maggiore di NUM. Quando viene usata anche l’opzione -v o –invert-match, grep si ferma dopo aver emesso NUM linee non corrispondenti. |
–mmap | Se possibile, usa la chiamata di sistema mmap per leggere l’input, invece della chiamata di sistema read di default. In alcune situazioni, –mmap fornisce prestazioni migliori. Tuttavia, –mmap può causare un comportamento non definito (inclusi i core dump) se un file di input si restringe mentre grep è in funzione, o se si verifica un errore di I/O. |
-n, –line-number | Fissa ogni linea di output con il numero di linea all’interno del suo file di input. |
-o, –only-matching | Mostra solo la parte di una linea che corrisponde a PATTERN. |
–label=LABEL | Visualizza l’input proveniente dallo standard input come input proveniente dal file LABEL. Questo è particolarmente utile per strumenti come zgrep, ad esempio, gzip -cd foo.gz |grep -H –label=foo qualcosa |
–line-buffered | Usa il line buffering. Questo può comportare una penalizzazione delle prestazioni. |
-q, –quiet, –silent | Siate tranquilli; non scrivete nulla sullo standard output. Esce immediatamente con stato zero se viene trovata una qualsiasi corrispondenza, anche se è stato rilevato un errore. Vedi anche l’opzione -s o –no-messages. |
-R, -r, –recursive | Leggi tutti i file sotto ogni directory, ricorsivamente; questo è equivalente all’opzione -d recurse. Modificato da: –include=PATTERN Ricorre nelle directory cercando solo i file corrispondenti a PATTERN. –exclude=PATTERN Ricorre nelle directory saltando i file corrispondenti a PATTERN. |
-s, –no-messages | Supprime i messaggi di errore sui file inesistenti o illeggibili. Nota sulla portabilità: a differenza di GNU grep, il grep tradizionale non era conforme a POSIX.2, perché il grep tradizionale non aveva un’opzione -q e la sua opzione -s si comportava come l’opzione -q di GNU grep. Gli script della shell che intendono essere portabili al grep tradizionale dovrebbero evitare sia -q che -s e dovrebbero invece reindirizzare l’output a /dev/null. |
-U, –binary | Tratta i file come binari. Per impostazione predefinita, sotto MS-DOS e Microsoft Windows, grep indovina il tipo di file guardando il contenuto dei primi 32 KB letti dal file. Se grep decide che il file è un file di testo, toglie i caratteri CR dal contenuto originale del file (per far funzionare correttamente le espressioni regolari con ^ e $). Specificando -U si annulla questa congettura, facendo sì che tutti i file vengano letti e passati al meccanismo di corrispondenza alla lettera; se il file è un file di testo con coppie CR/LF alla fine di ogni riga, questo causa il fallimento di alcune espressioni regolari. Questa opzione non ha effetto su piattaforme diverse da MS-DOS e MS-Windows. |
-u, –unix-byte-offsets | Riporta gli offset di byte in stile Unix. Questo interruttore fa sì che grep riporti gli offset dei byte come se il file fosse un file di testo in stile Unix, cioè con i caratteri CR rimossi. Questo produce risultati identici all’esecuzione di grep su una macchina Unix. Questa opzione non ha effetto a meno che non sia usata anche l’opzione -b; non ha effetto su piattaforme diverse da MS-DOS e MS-Windows. |
-V, –version | Stampa il numero di versione di grep sullo standard error. Questo numero di versione dovrebbe essere incluso in tutte le segnalazioni di bug (vedi sotto). |
-v, –invert-match | Invertire il senso della corrispondenza, per selezionare le linee non corrispondenti. |
-w, –word-regexp | Seleziona solo le linee contenenti corrispondenze che formano parole intere. Il test è che la sottostringa corrispondente deve essere o all’inizio della riga, o preceduta da un carattere costituente non parola. Allo stesso modo, deve essere o alla fine della riga o seguita da un carattere costituente non parola. I caratteri costitutivi della parola sono lettere, cifre e l’underscore. |
-x, –line-regexp | Seleziona solo le corrispondenze che corrispondono esattamente all’intera riga. |
-y | Sinonimo obsoleto di -i. |
-Z, –null | Emette un byte zero (il carattere ASCII NULL) invece del carattere che normalmente segue un nome di file. Per esempio, grep -lZ emette un byte zero dopo ogni nome di file invece del solito newline. Questa opzione rende l’output non ambiguo, anche in presenza di nomi di file contenenti caratteri insoliti come i newline. Questa opzione può essere usata con comandi come find -print0, perl -0, sort -z, e xargs -0 per elaborare nomi di file arbitrari, anche quelli che contengono caratteri newline. |
Espressioni regolari
Un’espressione regolare è uno schema che descrive un insieme di stringhe. Le espressioni regolari sono costruite analogamente alle espressioni aritmetiche, usando vari operatori per combinare espressioni più piccole.
Grep comprende due diverse versioni della sintassi delle espressioni regolari: “base” ed “estesa”. In GNU grep, non c’è differenza nelle funzionalità disponibili usando entrambe le sintassi. In altre implementazioni, le espressioni regolari di base sono meno potenti. La seguente descrizione si applica alle espressioni regolari estese, che sono usate in egrep; le differenze per le espressioni regolari di base sono riassunte in seguito.
I mattoni fondamentali sono le espressioni regolari che corrispondono ad un singolo carattere. La maggior parte dei caratteri, comprese tutte le lettere e le cifre, sono espressioni regolari che corrispondono a se stesse. Qualsiasi metacarattere con un significato speciale può essere citato facendolo precedere da un backslash.
Un’espressione parentetica è una lista di caratteri racchiusa da . Corrisponde a qualsiasi singolo carattere della lista; se il primo carattere della lista è il trattino ^ allora corrisponde a qualsiasi carattere non presente nella lista. Per esempio, l’espressione regolare corrisponde a qualsiasi singola cifra.
In un’espressione parentetica, un’espressione di intervallo consiste di due caratteri separati da un trattino (“-“). Corrisponde a qualsiasi singolo carattere che si collochi tra i due caratteri, incluso, usando la sequenza di ordinamento e il set di caratteri del locale. Per esempio, nel locale C predefinito, è equivalente a . Molti locali ordinano i caratteri in ordine di dizionario, e in questi locali spesso non è equivalente a ; potrebbe essere equivalente a , per esempio. Per ottenere l’interpretazione tradizionale delle espressioni parentetiche, potete usare il locale C impostando la variabile d’ambiente LC_ALL al valore C.
Infine, alcune classi nominate di caratteri sono predefinite nelle espressioni parentetiche, come segue. I loro nomi sono auto esplicativi, e sono , , , , , , , , , , , e . Per esempio, ] significa , tranne che quest’ultima forma dipende dal locale C e dalla codifica dei caratteri ASCII, mentre la prima è indipendente dal locale e dal set di caratteri. (Notate che le parentesi in questi nomi di classe sono parte dei nomi simbolici, e devono essere incluse in aggiunta alle parentesi che delimitano la lista di parentesi). La maggior parte dei metacaratteri perde il suo significato speciale all’interno delle liste. Per includere un letterale ] mettilo per primo nella lista. Allo stesso modo, per includere un letterale ^ mettilo ovunque ma non per primo. Infine, per includere un letterale – mettilo per ultimo.
Il punto . corrisponde a qualsiasi singolo carattere. Il simbolo \w è un sinonimo di ] e \W è un sinonimo di ].
Il trattino ^ e il segno del dollaro (“$”) sono metacaratteri che corrispondono rispettivamente alla stringa vuota all’inizio e alla fine di una riga. I simboli \< e \325> corrispondono rispettivamente alla stringa vuota all’inizio e alla fine di una parola. Il simbolo \b corrisponde alla stringa vuota al bordo di una parola, e \B corrisponde alla stringa vuota se non è al bordo di una parola.
Un’espressione regolare può essere seguita da uno dei vari operatori di ripetizione:
? | L’elemento precedente è opzionale e viene abbinato al massimo una volta. |
* | L’elemento precedente verrà abbinato zero o più volte. |
+ | L’elemento precedente verrà abbinato una o più volte. |
{n} | L’elemento precedente viene abbinato esattamente n volte. |
{n,} | L’elemento precedente viene abbinato n o più volte. |
{n,m} | L’elemento precedente è abbinato almeno n volte, ma non più di m volte. |
Due espressioni regolari possono essere concatenate; l’espressione regolare risultante corrisponde a qualsiasi stringa formata dalla concatenazione di due sottostringhe che corrispondono rispettivamente alle sottoespressioni concatenate.
Due espressioni regolari possono essere unite dall’operatore infix |; l’espressione regolare risultante corrisponde a qualsiasi stringa che corrisponde a una delle due sottoespressioni.
La ripetizione ha la precedenza sulla concatenazione, che a sua volta ha la precedenza sull’alternanza. Un’intera sottoespressione può essere racchiusa tra parentesi per ignorare queste regole di precedenza.
Il rinvio \n, dove n è una singola cifra, corrisponde alla sottostringa precedentemente abbinata all’ennesima sottoespressione tra parentesi dell’espressione regolare.
Nelle espressioni regolari di base i metacaratteri ?, +, {, |, (, e ) perdono il loro significato speciale; si usano invece le versioni con barre rovesciate \?
L’egrep tradizionale non supporta il metacarattere {, e alcune implementazioni egrep supportano invece \{, così gli script portatili dovrebbero evitare { nei modelli egrep e dovrebbero usare per corrispondere un letterale {.
GNU egrep cerca di supportare l’uso tradizionale assumendo che { non è speciale se sarebbe l’inizio di una specifica di intervallo non valida. Per esempio, il comando di shell egrep ‘{1’ cerca la stringa di due caratteri {1 invece di segnalare un errore di sintassi nell’espressione regolare. POSIX.2 permette questo comportamento come estensione, ma gli script portatili dovrebbero evitarlo.
Variabili d’ambiente
Il comportamento di Grep è influenzato dalle seguenti variabili d’ambiente:
Un locale LC_foo è specificato esaminando le tre variabili d’ambiente LC_ALL, LC_foo, LANG, in questo ordine. La prima di queste variabili che viene impostata specifica il locale. Per esempio, se LC_ALL non è impostato, ma LC_MESSAGES è impostato a pt_BR, allora il portoghese brasiliano è usato per il locale LC_MESSAGES. Il locale C viene usato se nessuna di queste variabili d’ambiente è impostata, o se il catalogo dei locali non è installato, o se grep non è stato compilato con il supporto della lingua nazionale (NLS).
GREP_OPTIONS
Questa variabile specifica le opzioni predefinite da mettere davanti a qualsiasi opzione esplicita. Per esempio, se GREP_OPTIONS è ‘–binary-files=without-match –directories=skip’, grep si comporta come se le due opzioni –binary-files=without-match e –directories=skip fossero state specificate prima di qualsiasi opzione esplicita. Le specifiche delle opzioni sono separate da spazi bianchi. Un backslash sfugge al carattere successivo, quindi può essere usato per specificare un’opzione contenente spazi bianchi o un backslash.
GREP_COLOR
Specifica il marcatore per l’evidenziazione.
LC_ALL, LC_COLLATE, LANG
Queste variabili specificano il locale LC_COLLATE, che determina la sequenza di fascicolazione usata per interpretare espressioni di intervallo come .
LC_ALL, LC_CTYPE, LANG
Queste variabili specificano il locale LC_CTYPE, che determina il tipo di caratteri, es, quali caratteri sono spazi bianchi.
LC_ALL, LC_MESSAGES, LANG
Queste variabili specificano il locale LC_MESSAGES, che determina la lingua che grep usa per i messaggi. Il locale C predefinito usa messaggi in inglese americano.
POSIXLY_CORRECT
Se impostato, grep si comporta come richiede POSIX.2; altrimenti, grep si comporta più come altri programmi GNU. POSIX.2 richiede che le opzioni che seguono i nomi dei file siano trattate come nomi di file; per impostazione predefinita, tali opzioni sono permutate all’inizio della lista degli operandi e sono trattate come opzioni. Inoltre, POSIX.2 richiede che le opzioni non riconosciute siano diagnosticate come “illegali”, ma poiché non sono realmente contro la legge, il default è diagnosticarle come “non valide”. POSIXLY_CORRECT disabilita anche _N_GNU_nonoption_argv_flags_, descritto di seguito.
_N_GNU_nonoption_argv_flags_
(Qui N è l’ID numerico del processo di grep.) Se l’iesimo carattere del valore di questa variabile di ambiente è 1, non considerate l’iesimo operando di grep come un’opzione, anche se sembra esserlo. Una shell può mettere questa variabile nell’ambiente per ogni comando che esegue, specificando quali operandi sono i risultati dell’espansione dei caratteri jolly del nome del file e quindi non dovrebbero essere trattati come opzioni. Questo comportamento è disponibile solo con la libreria GNU C, e solo quando POSIXLY_CORRECT non è impostato.
Esempi
egrep "support|help|windows" myfile.txt
Cerca modelli di aiuto e finestre di supporto nel file myfile.txt.
egrep '^+$' myfile.txt
Cerca qualsiasi riga in myfile.txt che inizia una riga con una parola alfabetica che finisce anche la riga.
egrep -c '^begin|end$' myfile.txt
Conta il numero di linee in myfile.txt che iniziano con la parola ‘begin’ o finiscono con la parola ‘end’.
fgrep – Filtra il testo che corrisponde a una stringa di caratteri fissi.
grep – Filtra il testo che corrisponde a un’espressione regolare.
sed – Un’utilità per filtrare e trasformare il testo.
sh – L’interprete di comandi della shell Bourne.