Comprensione del comando grep con esempi pratici per filtrare e visualizzare facilmente il contenuto del file
GREP
sta per "Stampa globale a espressioni regolari". È un'utile utilità della riga di comando fornita da Linux, per cercare la riga di testo che corrisponde al modello fornito dall'utente.
grep
prende l'input dall'utente sotto forma di stringhe o parole che l'utente desidera cercare in un particolare file. Il comando controlla quindi il file specificato dall'utente per questo modello e quindi restituisce le righe che corrispondono al modello fornito.
Fa un ottimo lavoro filtrando il contenuto di un file, rendendo così il nostro compito più facile cercare contenuti particolari su uno o più file contemporaneamente.
In questo articolo esaminiamo grep
nel dettaglio il funzionamento del comando con alcuni esempi pratici.
Opzioni disponibili con grep
comando
Queste sono alcune delle opzioni fondamentali che utilizzerai frequentemente con il grep
comando.
Opzione |
Descrizione |
-i |
Per una ricerca senza distinzione tra maiuscole e minuscole |
-r |
Per cercare ricorsivamente tutti i file nella directory specificata e nelle sue sottodirectory |
-c |
Per visualizzare il numero totale di volte in cui appare una stringa |
-v |
Per visualizzare le linee non corrispondenti |
-w |
Filtra per quella particolare parola usata separatamente |
Usando il grep
comando
grep
Il comando viene solitamente utilizzato con l' |
utilità pipe ( ). Può essere implementato con la shell pipe quando si desidera utilizzarlo con altri comandi Linux. Tuttavia, grep
può essere utilizzato anche singolarmente senza l' |
utilità pipe ( ).
Vediamo alcune delle sintassi di base del grep
comando con e senza l'utilità pipe.
Lascia che ti mostri prima il file di testo di esempio che userò per illustrare il grep
comando.
INDIA IS A BEAUTIFUL COUNTRY OF PEACE LOVING PEOPLE.
india stands on three pillars of legislature, executive and judiciary.
India Is a Beautiful Country Of Peace Loving People.
India cares for the people as it's resource
cartesian coordinates
importance of all th cartesian coordinates.
Following are two empty lines.
use of a bullock cart is a common sight in the village for the agrarian chores.
This is the end of the sample file.
grep
utilizzato con l' utilità pipe ( | )
grep
Il comando può essere implementato insieme ad altri comandi Linux usando le shell pipe. Ad esempio, utilizzare il cat
comando per visualizzare il contenuto del file ma allo stesso tempo reindirizzare l'output utilizzando il grep
comando per visualizzare solo il contenuto che si desidera vedere. Questo sarà più chiaro quando esamineremo l'esempio.
Sintassi :
[command] | grep [string]
Esempio :
cat sample.txt | grep legislature
Qui, ho usato il cat
comando per visualizzare alcune righe dal file 'sample.txt'. Devono essere visualizzate solo le righe che contengono la parola "legislatura" e ignorare il resto delle righe.
Uscita :
[email protected]:~/workspace$ cat sample.txt | grep legislature
india stands on three pillars of legislature, executive and judiciary.
[email protected]:~/workspace$
grep
utilizzato senza utilità pipe ( | )
grep
può essere utilizzato anche direttamente come comando individuale senza utilizzare l' |
utilità pipe ( ).
Sintassi :
grep [string_to_be_searched] [filename]
Esempio :
grep India sample.txt
Uscita :
India Is a Beautiful Country Of Peace Loving People.
India cares for the people as it's resource
Pertanto, ho utilizzato il grep
comando direttamente per filtrare le righe che contengono la stringa "India" dal file di testo "sample.txt".
Ricerca senza distinzione tra maiuscole e minuscole utilizzando il grep
comando
Linux è molto cauto riguardo alla distinzione tra maiuscole e minuscole quando eseguiamo i comandi sul terminale. Ciò richiede che l'utente stia attento al caso della stringa inserita nel comando.
Vediamolo attraverso un esempio.
grep peace sample.txt
In questo caso, non otterremo un output poiché non esiste una parola come "pace" nel file di esempio. Abbiamo la parola 'Pace' con la 'P' maiuscola. La parola è la stessa ma quando usiamo il grep
comando senza alcuna opzione, cerca la corrispondenza esatta nel file, ignorando eventuali modifiche nelle lettere maiuscole.
Per evitare questa ambiguità, puoi semplicemente usare l' -i
opzione che dice letteralmente al grep
comando "dimentica il caso in cui ho inserito la stringa e cerca semplicemente tutti i modelli corrispondenti nel file".
Sintassi:
grep -i [string] [filename]
Esempio :
grep -i peace sample.txt
Uscita :
INDIA IS A BEAUTIFUL COUNTRY OF PEACE LOVING PEOPLE.
India Is a Beautiful Country Of Peace Loving People.
Tutte le righe corrispondenti vengono visualizzate indipendentemente dal caso in cui si trova la stringa corrispondente.
Ricerca ricorsiva usando il grep
comando
L' -r
opzione cercherà tutti i file in una directory e tutte le sue sottodirectory che corrispondono al modello di stringa fornito dall'utente nel comando.
Sintassi :
grep -i -r [string] [file_path]
Esempio :
grep -i -r tomcat /home/gaurav/workspace
La stringa qui è "tomcat" e verrà cercata nell'area di lavoro della directory. Verranno scansionate anche tutte le sottodirectory ei file nella directory 'workspace' in modo che corrispondano allo schema di stringa fornito.
Uscita :
./context_log.policy:// catalina.policy - Security Policy Permissions for Tomcat 7
./context_log.policy:// Note: If tomcat-juli.jar is in ${catalina.base} and not in ${catalina.home},
./context_log.policy:// grant codeBase "file:${catalina.base}/bin/tomcat-juli.jar" {..}
./context_log.policy:grant codeBase "file:${catalina.home}/bin/tomcat-juli.jar" {
./context_log.policy: permission java.lang.RuntimePermission "accessClassInPackage.org.apache.tomcat.websocket.server";
./context.xml:
./catalina.properties:# - Tomcat Bootstrap JARs
./catalina.properties:# - Tomcat API JARs
./catalina.properties:# - Tomcat JARs
./catalina.properties:# - Common non-Tomcat JARs
./catalina.properties:org.apache.catalina.startup.TldConfig.jarsToSkip=tomcat7-websocket.jar
./catalina.properties:tomcat.util.buf.StringCache.byte.enabled=true
./catalina.properties:#tomcat.util.buf.StringCache.char.enabled=true
./catalina.properties:#tomcat.util.buf.StringCache.trainThreshold=500000
./catalina.properties:#tomcat.util.buf.StringCache.cacheSize=5000
./server.xml: pathname="conf/tomcat-users.xml" />
./server.xml:
./tomcat-users.xml:
./tomcat-users.xml:
./web.xml:
./web.xml:
NOTA : durante l'utilizzo -r
dell'opzione con il grep
comando è necessario fornire il percorso del file e non il nome del file
Ricerca di parole intere solo con il grep
comando
Molte volte il caso è che cercherai una parola ma finirai per popolare il tuo terminale con le righe corrispondenti che contengono la tua parola corrispondente ma non come una singola parola. Potresti vedere le righe che contengono alcune parole la cui sottoparte è la stringa che hai inserito.
Confuso con questo? Non preoccuparti, è molto più facile da capire una volta ottenuto l'esempio.
Esempio :
Qui, voglio cercare una singola parola "carrello" e visualizzare tutte le righe corrispondenti a questa parola nel file "sample.txt".
grep -i cart sample.txt
Uscita :
Cartesian coordinates
importance of all the Cartesian coordinates.
use of a bullock cart is a common sight in the village for the agrarian chores
The cart went missing as the boy left it loose.
Nell'output si può osservare che la parola 'cartesiano' contiene anche la parola 'carrello' e quindi vengono visualizzate anche le righe contenenti la parola 'cartesiano' anche se non vogliamo che vengano visualizzate.
Puoi usare l' -w
opzione con il grep
comando per risolvere questa ambiguità.
Sintassi :
grep -i -w [string] [filename]
Esempio :
grep -i -w cart sample.txt
Uscita :
use of a bullock cart is a common sight in the village for the agrarian chores.
The cart went missing as the boy left it loose.
Ora, quando hai usato l' w
opzione – con grep
otterrai solo le righe in cui la parola 'carrello' è usata nel suo insieme.
Ricerca invertita usando il grep
comando
grep
comando può essere utilizzato anche in modo inverso. Possiamo usare il grep
comando in modo opposto nascondendo le righe corrispondenti e visualizzando solo le righe in cui non viene trovata la corrispondenza. Puoi farlo usando l' -v
opzione con il grep
comando.
Sintassi :
grep -i -v [string] [filename]
Esempio :
grep -i -v resource sample.txt
Uscita :
INDIA IS A BEAUTIFUL COUNTRY OF PEACE LOVING PEOPLE.
india stands on three pillars of legislature, executive and judiciary.
India Is a Beautiful Country Of Peace Loving People.
cartesian coordinates
importance of all th cartesian coordinates.
use of a bullock cart is a common sight in the village for the agrarian chores.
This is the end of the sample file.
Nell'output vengono visualizzate tutte le altre righe tranne la riga che contiene la parola "risorsa".
Conteggio delle occorrenze della stringa corrispondente
L'output del grep
comando è solitamente molto lungo se i dati nel file sono estesi. Più sono le corrispondenze, più lunghe sono le uscite del grep
comando. Linux ti offre un'opzione in cui puoi visualizzare il numero di occorrenze della corrispondenza.
Sintassi :
grep -i -c [string] [filename]
Esempio :
grep -i -c india sample.txt
Uscita :
[email protected]:~/workspace$ grep -i -c india sample.txt
4
[email protected]:~/workspace$
Qui, l'output è un numero che è il numero di occorrenze della parola "India" nel file sample.txt.
NOTA : ho usato l' -i
opzione in ogni esempio per essere al sicuro con il problema della distinzione tra maiuscole e minuscole. Se sei sicuro del caso della parola che stai cercando, puoi tranquillamente omettere l' -i
opzione.
Conclusione
Abbiamo appreso gli usi fondamentali del grep
comando sui sistemi Linux in questo tutorial. Abbiamo anche imparato a visualizzare vari contenuti che meglio si adattano alle nostre esigenze e a non affollare il terminal con carichi di linee. grep
Il comando farà sicuramente risparmiare tempo se usato per scansionare grandi set di dati.