fb-pixel

Come cercare stringhe usando il comando grep su Linux

Vuoi imparare a usare il comando grep su Linux? In questa guida vedremo come usarlo insieme alle sue opzioni più utili.

In breve, il comando grep ci permette di trovare stringhe di caratteri in uno o più file. Per sfruttarlo al meglio possiamo usare le opzioni e le espressioni regolari per fare ricerche mirate anche in file molto grandi.

Iniziamo dalla base e vediamo come funziona.

Sintassi del comando grep

Il comando grep sta per “global regular expression print” e serve a fare una ricerca mirata nei file di testo.

Quando vogliamo trovare una stringa specifica, ad esempio una parola o una frase in un testo, possiamo usare il comando in questo modo:

grep stringa-da-cercare file.txt

La sintassi di base del comando grep è semplice: si usa il comando seguito dalla stringa e poi dal nome del file in cui vogliamo fare la ricerca.

Come vedremo più avanti in questa guida attraverso degli esempi pratici, questo è solo l’utilizzo di base del comando grep. Infatti, possiamo usare questo stesso comando anche per fare ricerche in file multipli o ricercare più di un pattern allo stesso tempo.

Iniziamo dal vedere i casi d’uso più comuni per poi passare a degli esempi avanzati.

Casi d’uso del comando grep

In questa prima parte della guida ti mostrerò gli utilizzi di base del comando grep. Seguendo questi esempi potrai iniziare a prendere confidenza con il comando e capire come funziona.

Partiamo dalla ricerca in un singolo file per poi passare alla ricerca in file multipli.

Cercare una stringa in un file con grep

L’utilizzo più semplice che possiamo fare del comando grep è cercare una stringa definita in un file specifico.

Quando facciamo la ricerca di una stringa, dobbiamo ricordarci che:

  • se vogliamo cercare una singola parola, senza spazi né caratteri speciali, possiamo omettere le virgolette;
  • negli altri casi possiamo usare le virgolette singole ‘ oppure le doppie “. Per esempio le virgolette doppie ci permettono di cercare una stringa che abbia al suo interno virgolette singole.
    • Esempio: “Questa è una frase con ‘virgolette’.”

Tornando a noi, per cercare una stringa in un file usiamo il comando grep così:

grep 'frase da cercare' nome-file.txt

Nel nostro esempio ho cercato una singola parola nel file “citta-italia.txt”, così:

grep Italia citta-italia.txt
Grep Ricerca Stringa In File

Nel risultato, come si vede nello screenshot qui sopra, la stringa da cercare è stata evidenziata in rosso.

Nota che se non ci sono corrispondenze nel file indicato, non verrà mostrato nessun output.

Fare una ricerca in più file

Possiamo utilizzare il comando Linux grep anche per fare una ricerca di una singola stringa in più file.

La sintassi da usare è questa:

grep stringa file1.txt file2.txt

Nel nostro esempio:

grep Italia citta-italia.txt ricerca.txt
Grep Ricerca Stringa In File Multipli

Con questo comando sto cercando la stringa “Italia” in due file di testo, come risultato mi vengono mostrate tutte le corrispondenze e viene indicato in quale file sono state trovate. Nell’esempio qui sopra ci sono tre corrispondenze nel primo file e una nel secondo.

Cercare una stringa in tutti i file all’interno di una cartella

Come abbiamo visto utilizzando altri comandi per lavorare con i file come cp ed mv, il carattere wildcard (*) entra spesso in gioco.

Nel caso di grep possiamo utilizzare l’asterisco per indicare che vogliamo fare una ricerca in tutti i file di una cartella in questo modo:

grep stringa *

Ecco il nostro esempio:

grep Italia *
Usare Grep Per Ricerca Tutti File In Cartella

Come risultato ci viene mostrata la corrispondenza in sei diversi file.

Attenzione, in questo modo la ricerca verrà fatta nei file della cartella, ma non nelle sottocartelle, quando vedremo le opzioni ti mostrerò come includere anche le sottocartelle.

Cercare una stringa in tutti i file con un’estensione

In alternativa possiamo anche restringere la ricerca ai file che abbiano una specifica estensione. Per farlo usiamo sempre il wildcard, così:

grep stringa *.txt

In questo caso stiamo facendo la ricerca solo nei file “.txt“.

grep Italia *.txt
Grep Ricerca File Estensione

Usare il comando grep con le opzioni

Come gli altri comandi Linux, anche grep ha delle opzioni specifiche che ci permettono di fare delle operazioni più avanzate.

Con le opzioni di grep possiamo ricercare corrispondenze esatte, mostrare i numeri di riga, estendere il risultato mostrando anche le righe vicine a quella in cui viene trovata la stringa e così via.

Vediamo quali sono le opzioni più utili attraverso degli esempi pratici che ci permettono di capire come usare al meglio grep.

Fare una ricerca con grep includendo le sottocartelle

Negli esempi precedenti abbiamo visto come fare una ricerca per una stringa in tutti i file di una cartella. Come dicevamo, però, usando semplicemente il comando grep senza opzioni, la ricerca viene effettuata solo nei file all’interno della cartella, ma le sottocartelle vengono escluse.

Se vogliamo includere anche le sottocartelle dobbiamo utilizzare l’opzione “-r” per fare una ricerca ricorsiva.

grep -r stringa *

Nel nostro esempio:

grep -r Italia *
Ricerca Grep Includendo Sottocartelle

Usando l’opzione -r abbiamo effettuato anche la ricerca nelle sottocartelle, infatti, una delle occorrenze è stata trovata nel file “paragrafo2.txt” all’interno della sottocartella “Ricerche”.

Quando usiamo il comando grep con l’opzione -r ci viene anche indicato il percorso del file in modo da permetterci di risalire alla posizione esatta.

Fare una ricerca per parole esatte

Quando utilizziamo il comando grep seguito da una stringa, il comando fa una ricerca anche per corrispondenze parziali. Ad esempio se stiamo cercando “italia” troverà anche le stringhe “italiana”, “italiani”, ecc.

Se, invece, vogliamo cercare delle parole esatte possiamo usare l’opzione -w.

grep -w parola file.txt

In questo esempio ho usato il comando grep con e senza opzione -w per farti capire la differenza:

Usare Grep Con Opzione W

Nel primo caso è stata cercata la stringa “cosmo” e sono state trovate due corrispondenze “cosmo” e “cosmopolita”.

Nel secondo caso, usando l’opzione w, ho ristretto la ricerca solo alla parola esatta “cosmo”.

Fare una ricerca ignorando maiuscole e minuscole

Se usiamo il comando grep senza specificare nessuna opzione, la ricerca terrà conto di maiuscole e minuscole cercando esattamente la stringa come l’abbiamo inserita.

Negli esempi che abbiamo visto prima, abbiamo cercato la parola “Italia” indicando la lettera iniziale maiuscola affinché venisse trovata correttamente.

Ci sono casi in cui abbiamo bisogno di fare una ricerca ignorando la differenza tra maiuscole e minuscole, per farlo possiamo usare l’opzione -i, in questo modo:

grep -i "stringa da cercare" file.txt

Nel mio esempio:

grep -i cosmo appunti.txt
Usare Grep Con Opzione I

Nel primo caso, senza usare l’opzione, è stata trovata solo la corrispondenza “cosmo” con tutte le lettere minuscole. Nel secondo comando ho aggiunto l’opzione -i e il comando grep ha indicato anche la corrispondenza “Cosmo” con iniziale maiuscola.

Questa opzione può esserci utile in molti casi, soprattutto quando vogliamo cercare corrispondenze che non sappiamo esattamente come sono state scritte o semplicemente anche per trovarle all’inizio di una frase e quindi con l’iniziale maiuscola.

Usare grep per la ricerca inversa

Quando usiamo il comando grep ci vengono mostrate le righe che contengono la stringa che stiamo cercando. Possiamo anche usare il comando grep “al contrario”, cioè per mostrare solo le righe che non contengono la stringa da noi cercata.

Per farlo si usa l’opzione -v in questo modo:

grep -v stringa nomefile.txt

Nel nostro esempio ho usato il comando cat per mostrare il contenuto del file. Poi ho usato il comando:

grep -v cosmo appunti.txt

Con questo comando, mi vengono mostrate solo le righe di testo che non contengono la parola “cosmo”.

Ecco, infatti, il risultato:

Usare Grep Per Ricerca Inversa

Cercare stringhe multiple con grep

Gli esempi che abbiamo visto finora ci permettono di usare il comando grep per cercare una singola stringa (parola o frase) all’interno di uno o più file.

Adesso passiamo a un’operazione diversa: cercare più stringhe.

Possiamo fare una ricerca di più stringhe all’interno di un file in questo modo:

grep -e 'stringa 1' -e 'stringa 2' file.txt

Nel nostro esempio ho usato il comando:

grep -e 'Roma' -e 'Milano' -e 'Genova' citta-italia.txt

Nell’output sono state evidenziate le stringhe cercate.

Cercare Stringhe Multiple Con Comando Grep Linux

Fare ricerche complesse con le regex

Possiamo usare grep in combinazione alle espressioni regolari (regex) per fare delle ricerche specifiche.

Per avere maggiori informazioni sulle regex possiamo dare il comando:

info grep "Regular Expressions"

In questo modo potremo aprire da terminale la pagina del manuale in cui ci viene spiegato come usare le regex con grep.

Alcuni caratteri che ci aiutano a creare le regex sono i seguenti:

  • “$” si usa per indicare la fine di una stringa;
  • “^” si usa per indicare l’inizio di una stringa;
  • “.” indica un singolo carattere;
  • “*” indica zero o più caratteri.

Per farti un esempio pratico ho creato un elenco di nomi, voglio trovare in questo elenco dei nomi che contengono “mari” quindi usando grep troverò “maria”, “mario”, ma anche “antonmario”.

Ricerca Grep Elenco

Se, invece, volessi affinare la ricerca potrei fare così:

grep ^Mari iscritti.txt

In questo modo trovo solo i nomi che iniziano con la stringa “Mari”, quindi rispetto al risultato precedente, “Antonmario” non verrà trovato:

Esempio Regex Con Grep

Posso anche usare i caratteri in combinazione:

grep -i mari.$ iscritti.txt

Analizziamo questo comando:

  • con l’opzione -i sto facendo una ricerca che ignora maiuscole e minuscole;
  • con l’espressione “mari.$” sto cercando una stringa che comprenda “mari” e sia seguita da un solo carattere.

Questo significa che Mario, Antonmario, Maria, Annamaria verranno inclusi, mentre nomi che hanno più di un carattere dopo “mari” come “Mariafrancesca” verranno esclusi.

Ecco infatti il risultato:

Esempio 2 Regex Con Grep

Con questi semplici esempi, ho voluto darti un’idea di quello che è possibile fare con le regex. Tieni conto che questi sono solo esempi basilari, ma già da questi si può intuire che, se usate bene, le espressioni regolari ci permettono di fare ricerche molto accurate.

Individuare i file in cui è presente la stringa

In tutti gli esempi che abbiamo visto, il comando grep ci restituisce la riga in cui viene trovata la stringa. Possiamo anche decidere di farci indicare solo i nomi dei file in cui è stata ritrovata la stringa, senza farci mostrare le righe interessate.

Facciamo come prima una ricerca per una stringa all’interno di una cartella:

grep -l stringa *

Nel nostro esempio:

grep -l Italia *

In questo caso il comando grep farà una ricerca per la stringa “Italia” in tutti i file della cartella corrente e ci mostrerà solo i nomi dei file in cui la stringa è stata trovata. Ecco il nostro risultato:

Comando Grep Con Opzione L

Mostrare altro contenuto insieme alla ricerca con grep

Quando usiamo il comando grep per trovare una stringa, ci viene mostrata solamente la riga interessata.

Con alcune opzioni possiamo scegliere di mostrare anche delle righe vicine a quella in cui è stata trovata la corrispondenza.

Le opzioni sono queste:

  • -A (–after-context) ci permette di mostrare un numero di righe prefissate che seguono la riga in cui c’è la corrispondenza;
  • -B (–before-context) come A, ma mostra le righe che precedono la corrispondenza;
  • -C (–context) ci mostra un numero prefissato di righe prima e dopo quella in cui c’è la corrispondenza.

Vediamo come funziona con un esempio pratico.

Ho usato questo comando:

grep debian appunti.txt

In questo caso mi è stata restituita solo la riga interessata, quella con la stringa.

Successivamente, usando l’opzione -A4 sto richiedendo di mostrarmi anche le righe successive a quella in cui è stato trovata la stringa:

grep -A4 debian appunti.txt
Grep Con Opzione A

Posso fare lo stesso per mostrare i contenuti che precedono la frase, in questo caso usando l’opzione -B:

grep -B4 debian appunti.txt

Ecco l’output:

Grep Con Opzione B

Per mostrare le righe che precedono e seguono la riga in cui c’è la corrispondenza, userò l’opzione -C:

grep -C3 Debian appunti.txt

Ecco il risultato:

Grep Con Opzione C

Nota che in questo caso ho cercato la stringa “Debian” per mostrarti una sezione diversa del documento, in cui c’è un elenco. In questo modo puoi vedere esattamente il numero di righe che vengono mostrate con questa opzione.

Come mostrare il numero di righe usando grep

In alcuni casi può essere utile vedere nel terminale il numero di riga per capire meglio in quale punto del documento è stata trovata una corrispondenza.

Per farlo ci basta usare l’opzione -n:

grep -n 'stringa da cercare' file.txt

Nel mio caso ho ripreso l’esempio precedente e combinato l’opzione -C per mostrare il contesto con l’opzione -n per mostrare il numero di righe:

grep -n -C3 Debian appunti.txt
Mostrare Numeri Di Riga Con Grep

Come contare il numero di righe in cui c’è la stringa

Possiamo usare il comando grep con l’opzione -c per contare in quante righe di un file è presente una stringa.

Si usa così:

grep -c stringa nome-file.txt

Nel nostro esempio

grep -c Linux appunti.txt

Come risultato ci verrà mostrato il numero di righe in cui è presente la stringa. Se poi diamo il comando con l’opzione -n possiamo vedere le righe con indicati i numeri di riga:

grep -n Linux appunti.txt

Dall’uso di queste due opzioni, infatti, possiamo capire che la stringa “Linux” è presente in 4 righe ed è presente nelle righe numero 1, 5, 7 e 9.

Usare Grep Con Opzione C Contare Righe

Se fai caso a questo esempio, puoi vedere che la parola Linux è in realtà ripetuta 6 volte, ma con l’opzione -c stiamo solo contando il numero di righe in cui è presente la parola e non il numero di volte in cui la parola è ripetuta.

Conclusioni

Con il comando grep possiamo ricercare stringhe specifiche all’interno di uno o più file. Usando il comando in combinazione con le opzioni e con le espressioni regolari possiamo fare ricerche precise anche in file di grandi dimensioni.

Hai mai usato grep prima d’ora? Quale opzione ti è stata più utile? Faccelo sapere lasciando un commento.


Prova gratis e senza impegno uno dei nostri piani hosting per 14 giorni. Non è richiesto nessun dato di pagamento!

Commenti

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *