Le caratteristiche più importanti del comando grep

Grep è un semplice e diffuso metodo, molto utile per cercare e filtrare specifiche stringhe di caratteri nei file su Linux. Il comando Linux si basa su una sintassi unitaria e facilita la ricerca tramite parametri prestabiliti.

Che cos’è grep?

grep è l’acronimo di “global regular expression print”. Poiché il programma è integrato nel pacchetto di base di Ubuntu, non è necessario installarlo. I comandi grep sono usati per cercare modelli e stringhe di caratteri. Si possono in tal modo filtrare ed evidenziare le informazioni cercate anche in file di log di grandi dimensioni. È importante ricordare che non si deve mai eseguire il comando grep per file relativi ai dispositivi, poiché ciò può provocare dei problemi.

In che modo è usato grep?

La sintassi di base di grep si presenta così: “grep [opzioni] stringa di ricerca [file]” oppure, in alternativa, “grep [opzioni] [-e modello | -f file] [file]”. Un semplice esempio di un comando grep in Linux potrebbe essere la ricerca di un termine nel testo di un codice o di un file di log. Se volete quindi cercare la parola “test” in un file di testo chiamato esempio.txt, immetterete il seguente comando grep: “grep "test" esempio.txt”. Vedrete quindi visualizzate le righe corrispondenti a tale criterio contenute in questo file.

Le espressioni regolari come base per grep

Le basi di questo processo in Linux sono le cosiddette “espressioni regolari”, che si differenziano nelle varianti “basic” ed “extended”, in cui la seconda è molto importante per il comando grep. Tramite le espressioni regolari possono essere cercate con grep dei singoli caratteri o stringhe di caratteri. Sia che si tratti di un carattere che di una lettera o di un numero, può essere trovato con una semplice immissione, anche se fa parte di una stringa di caratteri. Ad esempio, immettendo il numero “2” tramite il comando si troverebbe non solo il numero “2”, ma anche sequenze, come “1234”, “y2k” o “numero 2”.

Esistono dei caratteri in grep che svolgono una funzione nel processo di ricerca. Il carattere del dollaro “$”, ad esempio, trova la fine di una riga. Tali caratteri possono essere cercati separatamente tramite un comando specifico in grep. A questo scopo, il carattere è preceduto da una barra rovesciata. Se cercate, ad esempio, un punto “.” come segno d’interpunzione in un file, dovrete usare la combinazione “\.”.

Liste in grep

Con grep possono essere anche filtrate le liste di diversi caratteri, cioè le cosiddette “bracket expressions” (in italiano: espressioni tra parentesi). Per le liste di caratteri che devono essere cercate tramite l’operazione di ricerca, userete due parentesi quadre “[]”. Se, ad esempio, desiderate cercare tutte le lettere “e” maiuscole o minuscole, userete l’opzione di ricerca: “[Ee]”. Questa istruzione di ricerca trova quindi tutte le lettere “e”. Combinandole, invece, potete anche filtrare parole intere o frammenti di testo tramite una “e” maiuscola o minuscola. Inserite in grep, ad esempio, “[Ee]sodo”, grep trova non solo “Esodo” ma anche parti di testo con le “e” minuscole in una parola come “lesto”.

Un’altra utile funzione di grep è la possibilità di escludere nel processo di ricerca specifiche cifre da una lista e di cercare soltanto quelle che non sono comprese in tale esclusione. Per attivarla si antepone “^”. Con “^Ee” saranno ricercati, ad esempio, tutti i caratteri eccetto “E” ed “e”.

Con l’ausilio di liste predefinite, il comando grep in Linux vi permette di risparmiarvi del lavoro. Ciascuna di queste liste predefinite è compresa inoltre in parentesi quadre, vale a dire [[:listaesempio:]]. Le liste predefinite sono:

  • [:alnum:]: contiene tutte le cifre [:digit:] e lettere [:alpha:]
  • [:alpha:]: contiene tutte le lettere [:upper:] e [:lower:]
  • [:blank:]: contiene tutti gli spazi liberi creati dalla barra spaziatrice o dal tabulatore
  • [:cntrl:]: contiene tutti i caratteri di controllo
  • [:digit:]: contiene tutti i numeri da 0 a 9
  • [:graph:]: contiene tutti i caratteri grafici [:alnum:] e [:punct:]
  • [:lower:]: contiene tutte le lettere minuscole
  • [:print:]: contiene tutti i caratteri stampabili [:alnum:], [:punct:] e [:space:]
  • [:punct:]: contiene tutti i caratteri speciali e i segni di interpunzione
  • [:space:]: contiene tutti i caratteri che determinano uno spazio vuoto, come un ritorno a capo o gli spazi liberi
  • [:upper:]: contiene tutte le lettere maiuscole

Esempi di comandi grep molto utili

Se usati correttamente, i comandi grep vi aiutano a compiere delle ricerche nei file di grandi dimensioni. Diversi sono i parametri impiegabili affinché possiate definire con esattezza la ricerca, in modo che grep identifichi esclusivamente quei caratteri o quelle righe che volete trovare. Questi saranno contrassegnati con il segno “-“. Di seguito alcuni esempi molto utili:

  • -c: con -c oppure -count, il comando grep non cerca in base al modello dei criteri di ricerca, ma indica in quante righe tale schema di ricerca è stato trovato. Il comando grep “grep -c "test" esempio.txt” conta pertanto in quante righe “test” è presente e vi indica il numero.
  • -l: se volete sapere in quale file è stato trovato uno specifico termine di ricerca, usate l’opzione “-l” (“L” minuscola, da non confondere con la “I” maiuscola). Con il comando grep “grep -l "test" \*.txt” effettuate la ricerca di tutti i file che contengono il termine o la stringa di caratteri “test”.
  • -i: con -i le maiuscole e le minuscole delle parole saranno ignorate nella vostra ricerca. Quindi, “grep -i "test" esempio.txt” mostra tutte le righe che contengono sia “test” che “Test”.

Esistono altre tre varianti di grep

Oltre alla versione standard di grep, esistono altre tre varianti. egrep corrisponde in modo ampio a grep -E e considera il modello indicato come un’estensione delle espressioni regolari. fgrep corrisponde in buona parte a grep -F e cerca in modo particolare in base a parametri di determinati modelli. I caratteri che in altri comandi saranno letti come parte di un’espressione regolare, saranno interpretati da fgrep nel suo significato letterale senza la funzione aggiuntiva. Alcuni esempi al riguardo sono “$”, “*” oppure “\”. rgrep corrisponde a grep -r e cerca tutte le directory in modo ricorsivo, considera quindi anche le directory subordinate.

Per offrirti una migliore esperienza di navigazione online questo sito web usa dei cookie, propri e di terze parti. Continuando a navigare sul sito acconsenti all’utilizzo dei cookie. Scopri di più sull’uso dei cookie e sulla possibilità di modificarne le impostazioni o negare il consenso.