Introduzione
Questa guida descrive in dettaglio i comandi grep più utili per i sistemi Linux / Unix.
Dopo aver esaminato tutti i comandi e gli esempi, imparerai come utilizzare grep per cercare nei file un testo dal terminale.
Prerequisiti
- Sistema Linux o simile a UNIX
- Accesso a un terminale/riga di comando
- Un utente con i permessi per accedere ai file e alle directory desiderati
Cos'è il comando grep?
Grep è un acronimo che sta per G lobale R egular E xpressione P strappare.
Grep è uno strumento da riga di comando Linux/Unix utilizzato per cercare una stringa di caratteri in un file specificato. Il modello di ricerca del testo è chiamato espressione regolare. Quando trova una corrispondenza, stampa la riga con il risultato. Il comando grep è utile durante la ricerca in file di registro di grandi dimensioni.
Utilizzo del comando grep
Il comando grep è composto da tre parti nella sua forma più elementare. La prima parte inizia con grep
, seguito dal modello che stai cercando. Dopo la stringa viene il nome del file attraverso il quale grep cerca.
La sintassi del comando grep più semplice è simile alla seguente:
Il comando può contenere molte opzioni, variazioni di pattern e nomi di file. Combina tutte le opzioni necessarie per ottenere i risultati di cui hai bisogno. Di seguito sono riportati i comandi grep più comuni con esempi .
Per cercare un file
Per stampare qualsiasi riga da un file che contiene un modello specifico di caratteri, nel nostro caso phoenix
nel file sample2
, esegui il comando:
grep phoenix sample2
Grep visualizzerà ogni riga in cui esiste una corrispondenza per la parola phoenix
. Quando si esegue questo comando, non si ottengono corrispondenze esatte. Il terminale invece stampa le righe con le parole che contengono la stringa di caratteri che hai inserito. Ecco un esempio:
Per cercare più file
Per cercare più file con il comando grep, inserisci i nomi dei file che vuoi cercare, separati da uno spazio.
Nel nostro caso, il comando grep in modo che corrisponda alla parola phoenix
in tre file sample
, sample2
e sample3
assomiglia a questo esempio:
grep phoenix sample sample2 sample3
Il terminale stampa il nome di ogni file che contiene le righe corrispondenti e le righe effettive che includono la stringa di caratteri richiesta.
Puoi aggiungere tutti i nomi di file necessari. Il terminale stampa una nuova riga con il nome del file per ogni corrispondenza trovata nei file elencati.
Cerca in tutti i file nella directory
Per cercare tutti i file nella directory corrente, usa un asterisco invece del nome di un file alla fine di un comando grep.
In questo esempio, utilizziamo nix come criterio di ricerca:
grep nix *
L'output mostra il nome del file con nix e restituisce l'intera riga.
Per trovare solo parole intere
Grep ti consente di trovare e stampare i risultati solo per parole intere. Per cercare la parola fenice in tutti i file nella directory corrente, aggiungi -w al comando grep.
grep -w phoenix *
Questa opzione stampa solo le righe con le corrispondenze di parole intere ei nomi dei file in cui le ha trovate:
Quando -w
viene omesso, grep mostra il modello di ricerca anche se è una sottostringa di un'altra parola.
Se desideri cercare più stringhe e pattern di parole, consulta il nostro articolo su come eseguire il grep per più stringhe, pattern o parole.
Per ignorare il caso nelle ricerche Grep
Poiché i comandi grep fanno distinzione tra maiuscole e minuscole, uno degli operatori più utili per le ricerche grep è -i. Invece di stampare solo i risultati in minuscolo, il terminale visualizza i risultati sia in maiuscolo che in minuscolo. L'output include righe con voci di maiuscole e minuscole miste.
Un esempio di questo comando:
grep -i phoenix *
Se utilizziamo l'operatore -i operator
per cercare i file nella directory corrente per phoenix
, l'output è simile a questo:
Per cercare nelle sottodirectory
Per includere tutte le sottodirectory in una ricerca, aggiungi -r operatore al comando grep.
grep -r phoenix *
Questo comando stampa le corrispondenze per tutti i file nella directory corrente, nelle sottodirectory e nel percorso esatto con il nome del file. Nell'esempio seguente, abbiamo anche aggiunto il -w
per mostrare parole intere, ma il modulo di output è lo stesso.
Ricerca grep inversa
Puoi usare grep per stampare tutte le righe che non corrispondono a un modello specifico di caratteri. Per invertire la ricerca, aggiungi -v
a un comando grep.
Per escludere tutte le righe che contengono phoenix
, inserisci:
grep -v phoenix sample
Il terminale stampa tutte le righe che non contengono la parola utilizzata come criterio di ricerca. Usa -i operator
ignorare maiuscolo/minuscolo per escludere completamente la parola utilizzata per questa ricerca:
Per mostrare le righe che corrispondono esattamente a una stringa di ricerca
Il comando grep stampa intere righe quando trova una corrispondenza in un file. Per stampare solo le righe che corrispondono completamente alla stringa di ricerca, aggiungi -x opzione.
grep -x “phoenix number3” *
L'output mostra solo le righe con la corrispondenza esatta. Se sono presenti altre parole o caratteri nella stessa riga, grep non lo include nei risultati della ricerca. Non dimenticare di utilizzare le virgolette ogni volta che è presente uno spazio o un simbolo in un modello di ricerca.
Ecco un confronto dei risultati senza e con il -x
operatore nel nostro comando grep:
Elencare i nomi dei file corrispondenti
A volte, devi solo vedere i nomi dei file che contengono una parola o una stringa di caratteri ed escludere le righe effettive. Per stampare solo i nomi di file che corrispondono alla tua ricerca, usa -l operatore:
grep -l phoenix *
L'output mostra i nomi di file esatti che contengono phoenix
nella directory corrente ma non stampa le righe con la parola corrispondente:
Come promemoria, utilizza l'operatore di ricerca ricorsivo -r
per includere tutte le sottodirectory nella tua ricerca.
Per contare il numero di corrispondenze
Grep può visualizzare i nomi dei file e il conteggio delle righe in cui trova una corrispondenza per la tua parola.
Usa -c operatore per contare il numero di corrispondenze:
grep -c phoenix *
Per visualizzare il numero di righe prima o dopo una stringa di ricerca
A volte hai bisogno di più contenuti nei risultati di ricerca per decidere cosa è più pertinente.
Utilizzare i seguenti operatori per aggiungere le righe desiderate prima, dopo una corrispondenza o entrambe:
- Usa -A e un numero di righe da visualizzare dopo una corrispondenza:
grep -A 3 phoenix sample
- questo comando stampa tre righe dopo la corrispondenza. - Usa -B e un numero di righe da visualizzare prima di una corrispondenza:
grep -B 2 phoenix sample
- questo comando stampa due righe prima della corrispondenza. - Usa -C e un numero di righe da visualizzare prima di e dopo la partita:
grep -C 2 phoenix sample
- questo comando stampa due righe prima e dopo la partita.
Per visualizzare i numeri di riga con le corrispondenze grep
Quando grep stampa i risultati con molte corrispondenze, è utile vedere i numeri di riga. Aggiungi -n operatore a qualsiasi comando grep per mostrare i numeri di riga.
Cercheremo Fenice nella directory corrente, mostra due righe prima e dopo le corrispondenze insieme ai rispettivi numeri di riga.
grep -n -C 2 Phoenix sample
Limita l'output di grep a un numero fisso di righe
I singoli file, come i file di registro, possono contenere molte corrispondenze per i modelli di ricerca grep. Limita il numero di righe nell'output di grep aggiungendo -m opzione e un numero al comando.
grep -m2 Phoenix sample
In questo caso, il terminale stampa le prime due corrispondenze che trova nel sample
file.
Se non specifichi un file e cerchi tutti i file in una directory, l'output stampa i primi due risultati da ogni file insieme al nome del file che contiene le corrispondenze.