|
GREP(1) manual page
Table of Contents
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")
specificato. Di default, grep mostra solo le righe in cui è trovata la
corrispondenza.
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, separate 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 corrispondenza. 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 leggibili.
- -v
- Inverte il senso della corrispondenza,
per selezionare le righe che non corrispondono.
- -w
- Seleziona solo quelle
righe contenenti corrispondenze che formano parole intere. Il test è siffatto:
la sottostringa corrispondente 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 regolari: ``base'' e ``estesa.''
In GNU grep, non c'è alcuna differenza nelle funzionalità disponibili usando
una o l'altra sintassi. In altre implementazioni, 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] corrisponde ad una cifra
singola qualsiasi. Un intervallo di caratteri ASCII può essere specificato
dando il primo e l'ultimo carattere, separati da un trattino. Inoltre, sono
predefinite con un nome alcune classi di caratteri. I loro nomi sono spiegano
già tutto (N.d.T: se si è madrelingua inglese), e sono [:alnum:] (alfanumerici),
[:alpha:] (alfabetici), [: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 simbolo \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 concatenando due sotto
stringhe che corrispondono rispettivamente alle due sottoespressioni che
sono state concatenate.
Due espressioni regolari possono essere riunite
("join") con l'operatore 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 racchiusa
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'espressione regolare.
Nelle espressioni regolari base
i metacaratteri ?, +, {, |, (, e ) perdono 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 corrispondenze,
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@prep.ai.mit.edu.
Assicurarsi si 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.
Table of Contents
|