GREP(1) GREP(1)
grep, egrep, fgrep - stampa le righe che corrispondono ad un modello
grep [ -[[AB] ]num ] [ -[CEFGVBchilnsvwx] ] [ -e ] modello | -ffile ] [
file... ]
Grep ricerca nei file d'ingresso indicati (o nello standard input se
non specificato alcun file, o dato il nome di file -) le righe che
contengono una corrispondenza ("match") al modello ("pattern") specifi-
cato. Di default, grep mostra solo le righe in cui trovata la cor-
rispondenza.
Ci sono tre varianti principali di grep, controllate dalle seguenti
opzioni.
-G Interpreta modello come una espressione regolare base (si veda
sotto). Questo il comportamento di default.
-E Interpreta modello come una espressione regolare estesa (si veda
sotto).
-F Interpreta modello come un elenco di stringhe prefissate, sepa-
rate da newline, di ognuna delle quali deve essere cercata
un'istanza.
Inoltre, sono disponibili i due programmi alternativi egrep e fgrep.
Egrep
simile (ma non identico) a grep -E, ed compatibile con lo storico
comando Unix egrep. Fgrep
identico a grep -F.
Tutte le varianti di grep capiscono le seguenti opzioni:
-num Le corrispondenze saranno stampate con le num righe precedenti e
successive. Comunque, grep non stamper mai una riga pi di una
volta.
-A num Stampa anche le num righe successive alle righe in cui sono
trovate le corrispondenze.
-B num Stampa anche le num righe precedenti alle righe in cui sono
trovate le corrispondenze.
-C Equivalente a -2.
-V Stampa il numero di versione di grep nello standard error.
Questo numero di versione dovrebbe essere incluso in tutti i
rapporti sui bachi (si veda sotto).
-b Stampa lo spiazzamento in byte all'interno del file d'ingresso
prima di ognuna delle righe dell'output.
-c Sopprime l'output normale; stampa invece, per ognuno dei file
d'ingresso, il numero di righe in cui trovata la corrispon-
denza. Con l'opzione -v (si veda sotto), conta le righe che non
corrispondono.
-e modello
Usa modello come modello; utile per proteggere i modelli che
iniziano con -.
-f file
Ottiene il modello da file.
-h Sopprime la stampa dei nomi dei file in output quando la ricerca
fatta su pi file.
-i Ignora le differenze tra i caratteri maiuscoli e minuscoli sia
in modello che nei file d'ingresso.
-L Sopprime il normale output; stampa invece il nome di ognuno dei
file d'ingresso dai quali normalmente non sarebbe stato stampato
niente.
-l Sopprime il normale output; stampa invece il nome di ognuno dei
file d'ingresso dai quali normalmente sarebbe stato stampato
qualcosa.
-n Prefissa ogni riga dell'output con il numero di riga all'interno
del suo file d'ingresso.
-q Quiet; sopprime l'output normale.
-s Sopprime i messaggi d'errore sui file non esistenti o non leggi-
bili.
-v Inverte il senso della corrispondenza, per selezionare le righe
che non corrispondono.
-w Seleziona solo quelle righe contenenti corrispondenze che for-
mano parole intere. Il test siffatto: la sottostringa cor-
rispondente deve o essere all'inizio di una riga, o preceduta da
un carattere che non costituisce una parola. Similmente, deve
essere o alla fine di una riga o seguita da un carattere che non
costituisce una parola. I caratteri che costituiscono parole
sono le lettere, i numeri e l'underscore (`_').
-x Seleziona solo le corrispondenze in cui la corrispondenza tutta
la riga.
Una espressione regolare ("regular expression") un modello che
descrive un insieme di stringhe. Le espressioni regolari sono costruite
in modo analogo alle espressioni aritmetiche, usando diversi operatori
per combinare espressioni pi piccole.
Grep comprende due diverse versioni di sintassi delle espressioni rego-
lari: base e estesa. In GNU grep, non c' alcuna differenza nelle fun-
zionalit disponibili usando una o l'altra sintassi. In altre implemen-
tazioni, le espressioni regolari base sono meno potenti. La seguente
descrizione si applica alle espressioni regolari estese; le differenze
per le espressioni regolari base sono riassunte pi avanti.
I blocchi costituenti fondamentali sono le espressioni regolari che
corrispondono ad un singolo carattere. La maggior parte dei caratteri,
comprese tutte le lettere e i numeri, sono espressioni regolari che
corrispondono a loro stessi. Qualsiasi metacarattere con un significato
speciale pu essere protetto prefissandolo con un backslash ('\').
Una lista di caratteri racchiusi tra [ e ] permette la corrispondenza
di qualsiasi singolo carattere in quella lista; se il primo carattere
della lista il caret ^ allora permette la corrispondenza con qualsiasi
carattere che non
nella lista. Per esempio, l'espressione regolare [0123456789] cor-
risponde ad una cifra singola qualsiasi. Un intervallo di caratteri
ASCII pu essere specificato dando il primo e l'ultimo carattere, sepa-
rati da un trattino. Inoltre, sono predefinite con un nome alcune
classi di caratteri. I loro nomi spiegano gi tutto (N.d.T: se si
madrelingua inglese), e sono [:alnum:] (alfanumerici), [:alpha:] (alfa-
betici), [:cntrl:] (di controllo), [:digit:] (cifre), [:graph:]
(grafici), [:lower:] (minuscoli), [:print:] (di stampa), [:punct:]
(punteggiatura), [:space:] (spazio), [:upper:] (maiuscoli), e
[:xdigit:] (cifre esadecimali). Per esempio, [[:alnum:]] significa
[0-9A-Za-z], ad eccezione che quest'ultima dipende dalla codifica ASCII
dei caratteri, mentre la prima portabile (si noti che le parentesi
quadre nei nomi delle classi sono parte del nome simbolico, e devono
essere incluse in aggiunta alle parentesi che delimitano un elenco).
La maggior parte dei metacaratteri perdono il loro significato speciale
all'interno di un elenco. Per includere il carattere ] lo si posizioni
per primo nella lista. Similmente, per includere un ^ lo si posizioni
ovunque tranne che per primo, mentre per includere un - lo si metta per
ultimo.
Il carattere . corrisponde ad un qualsiasi singolo carattere. Il sim-
bolo \w
un sinonimo per [[:alnum:]] e \W
un sinonimo per [^[:alnum]].
Il caret ^ e il segno di dollaro $ sono metacaratteri che corrispondono
rispettivamente alla stringa vuota all'inizio e alla fine di una riga.
Il simboli \< e \> corrispondono rispettivamente alla stringa vuota
all'inizio e alla fine di una parola. Il simbolo \b corrisponde alla
stringa vuota presente ai "bordi" di una parola, e \B corrisponde alla
stringa vuota assicurandosi che non sia ai "bordi" di una parola.
Una espressione regolare che corrisponde a un carattere singolo pu
essere seguita da uno dei diversi operatori di ripetizione:
? Ci che precede opzionale e la corrispondenza pu esserci al pi
una volta.
* La corrispondenza a ci che precede pu esserci zero o pi volte.
+ La corrispondenza a ci che precede pu esserci una o pi volte.
{n} La corrispondenza a ci che precede deve esserci esattamente n
volte
{n,} La corrispondenza a ci che precede deve esserci n o pi volte.
{,m} La corrispondenza a ci che precede deve esserci al pi m volte.
{n,m} La corrispondenza a ci che precede deve esserci almeno n volte,
ma non pi di m volte.
Due espressioni regolari possono essere concatenate; l'espressione
regolare risultante corrisponde a qualsiasi stringa formata concate-
nando due sotto stringhe che corrispondono rispettivamente alle due
sottoespressioni che sono state concatenate.
Due espressioni regolari possono essere riunite ("join") con l'opera-
tore di "infissione" |; l'espressione regolare risultante corrisponde a
qualsiasi stringa che corrisponde ad una delle sottoespressioni.
La ripetizione ha precedenza sulla concatenazione, che a sua volta ha
precedenza sull'alternanza. Un'intera sottoespressione pu essere rac-
chiusa tra parentesi per modificare queste regole di precedenza.
Il riferimento all'indietro ("backreference") \n, dove n
una cifra singola, corrisponde alla sottostringa che in precedenza ha
corrisposto alla n-esima sottoespressione parentesizzata dell'espres-
sione regolare.
Nelle espressioni regolari base i metacaratteri ?, +, {, |, (, e ) per-
dono il loro significato speciale; si usino invece le versioni con
backslash \?, \+, \{, \|, \(, e \).
In egrep il metacarattere { perde il suo significato speciale; si usi
invece \{.
Normalmente, lo stato d'uscita 0 se sono state trovate delle cor-
rispondenze, e 1 se non ne sono state trovate (l'opzione -v inverte il
senso degli stati d'uscita). Lo stato d'uscita 2 se c'era un errore di
sintassi nel modello, se i file d'ingresso erano inaccessibili, o in
caso di altri errori di sistema.
Inviare i rapporti sui bachi ("bug report") a bug-gnu-
utils [AT] prep.edu. Assicurarsi di includere la parola grep da
qualche parte nel campo Subject:.
Numeri di ripetizioni elevati nel costrutto {m,n} possono far s che
grep usi un sacco di memoria. Inoltre, alcune altre oscure espressioni
regolari necessitano di tempo e spazio esponenziali, e possono far s
che grep vada in out of memory.
I riferimenti all'indietro sono molto lenti, e possono richiedere tempo
esponenziale.
GNU Project 10 settembre 1992 GREP(1)