Il comando grep è sicuramente uno dei più utili quando andiamo a ricercare qualcosa, sia essa contenuta in un file o in qualsiasi altro "oggetto" del nostro sistema operativo (ricordate che tutto è un file con il nostro sistema operativo).
Dalla pagina di manuale vediamo che la definizione che ne viene data è: grep - print lines matching a pattern; questo infatti è il suo funzionamento primario: prende un file in input, cerca le righe contenti un pattern dato ed infine le stampa a schermo.
Grep (General Regular Expression Print) è un comando dei sistemi Unix e Unix-like, e più in generale dei sistemi POSIX e GNU, che ricerca in uno o più file di testo le linee che corrispondono ad uno o più modelli specificati con espressioni regolari o stringhe letterali, e produce un elenco delle linee (o anche dei soli nomi di file) per cui è stata trovata corrispondenza. È un tipo di filtro.
Grep è comunemente utilizzato per ricercare le occorrenze di una o più parole in una serie di file, spesso in congiunzione con i comandi find e xargs tramite una pipeline software.
Grep può generalmente essere impiegato anche con file binari, ad esempio per ricercare la presenza di particolari etichette Exif all'interno di file contenenti immagini digitali. In particolare, la versione GNU di grep in questo caso elenca i nomi dei file contenenti la stringa o espressione regolare indicata (e non anche la porzione di testo corrispondente, come normalmente accade per i file di testo).
Ci sono però un'infinità di utilizzi diversi del comando, andiamone a vedere qualcuno con degli esempi commentati:
* grep -r 'hello' /home/user: cerca nella home dell'utente user tutte le occorrenze della stringa 'hello', l'opzione -r permette di controllare ricorsivamente tutte le cartelle sotto quella indicata;
* grep -r -l 'hello' /home/user: abbiamo aggiunto al comando precedente l'opzione -l che modifica l'output del comando. Infatti ora grep ci listerà non più le righe contenenti la stringa, ma i files che hanno almeno un'occorrenza della stringa dentro di essi;
[b:lstp]grep -r -l -v 'hello' /home/user: ancora un'altra opzione, questa volta si tratta di -v che sta per inVerse matching. Qui il comportamento di grep si inverte e seleziona non più i files che contengono un'occorrenza della stringa cercata, ma tutti gli altri;
* grep -r -w 'hello' /home/user: negli esempi precedenti veniva cercata un'occorrenza della stringa senza curarsi del fatto che essa fosse o meno una parola a sé stante; con l'opzione -w risolviamo questo inconveniente: il comando non andrà a considerare le righe con parole composte dalla stringa data, ma solo quelle che contengono effettivamente la parola isolata dalle altre. Oltre a questa opzione è possibile anche usare, direttamente nella stringa da cercare, < e >, che indicano rispettivamente l'inizio e la fine della parola. Ad esempio per cercare le parole che terminano con le lettere "ole" basterà digitare grep -r 'ole>' /home/user;
* ps ax | grep '[h]ttpd': è un comando molto utile che cerca tra i processi attivi (dati da ps ax) tutti i processi che contengano la stringa data, in questo caso httpd. La prima lettera è rinchiusa tra parentesi quadre perché si tratta di un'espressione regolare, nel caso non lo fosse, oltre a tutti i processi del web-server, grep troverebbe anche se stesso, disturbando la consultazione dei risultati;
* grep -r 'hello' /home/user | grep 'world': naturalmente usando bene gli outputs, si possono concatenare diversi grep per ottenere l'effetto voluto. Qui gli outputs saranno le righe contenenti sia 'hello' sia 'world'.
Altre informazioni importanti le trovate sulla pagina di manuale man grep.
Screenshots.
Dalla pagina di manuale vediamo che la definizione che ne viene data è: grep - print lines matching a pattern; questo infatti è il suo funzionamento primario: prende un file in input, cerca le righe contenti un pattern dato ed infine le stampa a schermo.
Grep (General Regular Expression Print) è un comando dei sistemi Unix e Unix-like, e più in generale dei sistemi POSIX e GNU, che ricerca in uno o più file di testo le linee che corrispondono ad uno o più modelli specificati con espressioni regolari o stringhe letterali, e produce un elenco delle linee (o anche dei soli nomi di file) per cui è stata trovata corrispondenza. È un tipo di filtro.
Grep è comunemente utilizzato per ricercare le occorrenze di una o più parole in una serie di file, spesso in congiunzione con i comandi find e xargs tramite una pipeline software.
Grep può generalmente essere impiegato anche con file binari, ad esempio per ricercare la presenza di particolari etichette Exif all'interno di file contenenti immagini digitali. In particolare, la versione GNU di grep in questo caso elenca i nomi dei file contenenti la stringa o espressione regolare indicata (e non anche la porzione di testo corrispondente, come normalmente accade per i file di testo).
Ci sono però un'infinità di utilizzi diversi del comando, andiamone a vedere qualcuno con degli esempi commentati:
* grep -r -l 'hello' /home/user: abbiamo aggiunto al comando precedente l'opzione -l che modifica l'output del comando. Infatti ora grep ci listerà non più le righe contenenti la stringa, ma i files che hanno almeno un'occorrenza della stringa dentro di essi;
[b:lstp]grep -r -l -v 'hello' /home/user: ancora un'altra opzione, questa volta si tratta di -v che sta per inVerse matching. Qui il comportamento di grep si inverte e seleziona non più i files che contengono un'occorrenza della stringa cercata, ma tutti gli altri;
* grep -r -w 'hello' /home/user: negli esempi precedenti veniva cercata un'occorrenza della stringa senza curarsi del fatto che essa fosse o meno una parola a sé stante; con l'opzione -w risolviamo questo inconveniente: il comando non andrà a considerare le righe con parole composte dalla stringa data, ma solo quelle che contengono effettivamente la parola isolata dalle altre. Oltre a questa opzione è possibile anche usare, direttamente nella stringa da cercare, < e >, che indicano rispettivamente l'inizio e la fine della parola. Ad esempio per cercare le parole che terminano con le lettere "ole" basterà digitare grep -r 'ole>' /home/user;
* ps ax | grep '[h]ttpd': è un comando molto utile che cerca tra i processi attivi (dati da ps ax) tutti i processi che contengano la stringa data, in questo caso httpd. La prima lettera è rinchiusa tra parentesi quadre perché si tratta di un'espressione regolare, nel caso non lo fosse, oltre a tutti i processi del web-server, grep troverebbe anche se stesso, disturbando la consultazione dei risultati;
* grep -r 'hello' /home/user | grep 'world': naturalmente usando bene gli outputs, si possono concatenare diversi grep per ottenere l'effetto voluto. Qui gli outputs saranno le righe contenenti sia 'hello' sia 'world'.
Altre informazioni importanti le trovate sulla pagina di manuale man grep.
Screenshots.
Trovato questo articolo interessante? Condividilo sulla tua rete di contatti in Twitter, sulla tua bacheca su Facebook, in Linkedin, Instagram o Pinterest. Diffondere contenuti che trovi rilevanti aiuta questo blog a crescere. Grazie!