Una delle operazioni più comunemente utilizzate nel terminale Linux è la ricerca nei file di testo e il filtraggio dell'output standard o dei flussi di errore. Linux fornisce un ottimo strumento che ci consente di risolvere facilmente questo compito:grep. In questo articolo tratteremo i casi d'uso più comuni di grep che semplificheranno sicuramente la tua routine quotidiana.
Cos'è grep
Grep sta per Global Regular Expression Print. Questa è un'utilità molto utile quando si tratta di cercare in un ampio set di file di testo (registri, ad esempio).
Grep è il comando più utile su Linux/Unix per amministratori di sistema, sviluppatori e ingegneri DevOps. Lo scopo principale di questo strumento è verificare la presenza di stringhe o pattern in un file specifico o filtrare l'output di altri comandi.
Questo modello che abbiamo menzionato sopra, è noto come un'espressione regolare.
Il comando grep stampa una riga sul terminale con la stringa se trova una corrispondenza con la query di ricerca.
Esistono molti esempi diversi di utilizzo di grep, quindi diamo un'occhiata a come e quando puoi usarlo.
Installazione di grep su Linux
Di solito, grep è installato nella maggior parte dei sistemi Linux e anche nei piccoli contenitori Docker. Ma se non lo hai installato sul tuo sistema, puoi farlo usando il seguente comando, ad esempio:
apt-get updateapt-get install -y grep
esempi di utilizzo di grep
In questa parte dell'articolo, tratteremo gli esempi più comuni di utilizzo di grep.
Filtraggio di un output di comando
Puoi usare il comando grep per cercare e stampare qualsiasi riga da qualsiasi output del comando Linux che corrisponde al modello specificato.
In questo esempio, verificheremo quali pacchetti Python 3 abbiamo nel nostro sistema Ubuntu:
dpkg -l | grep python3
In questo esempio:
dpkg -l
stamperà tutti i pacchetti installatigrep
filtreràdpkg
emette e stampa solo stringhe, che contengonopython3
stringa
Allo stesso modo, puoi visualizzare le informazioni sul modello della CPU, ad esempio:
grep -i 'Model' /proc/cpuinfo
Ricerca di una stringa all'interno di un file
In questo esempio, il comando grep cercherà la stringa "root" nel file "/etc/passwd" e la stamperà se la stringa è stata trovata.
Di solito, utilizziamo questo comando per verificare se il sistema ha un account utente con il nome specificato (esempio root in out):
grep root /etc/passwd
Cerca in più file
Per scoprire la stringa in più file contemporaneamente, utilizzare il comando grep e specificare i nomi dei file in un'unica riga. Puoi usare le espressioni regolari per cercare i file per maschera.
Scarichiamo Apache access.log pubblicamente accessibile:
mkdir -p /var/log/httpd
cd /var/log/httpd
wget http://www.almhuette-raith.at/apache-log/access.log
Ora, dividiamo questo file in più file di 10000 righe nel file:
Ora possiamo cercare tra i file 500 errori del server HTTP:
grep ' 500 ' xac xad
Per cercare in tutti i file all'interno della directory di lavoro corrente, usa *
dopo il modello.
Nell'esempio seguente, il comando grep cercherà 500 errori del server in tutti i file:
grep ' 500 ' *
Ricerca di parole intere
Con il -w
opzione nel comando grep, puoi cercare i file contenenti un modello di parole:
grep -w 'Windows XP' *
Ricerca senza distinzione tra maiuscole e minuscole
Il comando grep è abbastanza intelligente da permetterci di effettuare ricerche indipendentemente dalla distinzione tra maiuscole e minuscole del pattern di ricerca.
Per farlo, dobbiamo usare -i
come argomento.
Ecco lo stesso esempio, ma ora stiamo eseguendo il filtraggio senza distinzione tra maiuscole e minuscole:
grep -i -w 'windows xp' *
File di output contenenti pattern di ricerca
Puoi usare -l
opzione per visualizzare tutti i nomi di file contenenti il modello cercato:
grep -l -i -w 'windows xp' *
Conteggia le corrispondenze per file
Se vuoi conoscere il numero di volte in cui il tuo modello è stato abbinato in tutti i file, aggiungi il -c
opzione:
grep -c -i -w 'windows xp' *
Numero di righe prima del pattern cercato
Per visualizzare le righe in un file prima del modello di ricerca, aggiungi -B
argomento seguito dal conteggio dei numeri che vuoi recuperare dal file:
grep -B 3 -i -w 'windows xp' xaf
Numero di righe dopo il pattern cercato
Allo stesso modo, puoi usare -A
argomento per specificare il conteggio delle righe da stampare dopo il modello cercato:
grep -A 3 -i -w 'windows xp' xaf
Stampa il numero di riga per la corrispondenza del modello di ricerca
Per visualizzare il numero di riga del pattern cercato trovato, puoi usare -n
argomento:
grep -n -i -w 'windows xp' xaf
Corrispondenza all'inizio della stringa
Nell'esempio seguente, utilizzeremo il comando grep per trovare tutte le richieste originate dall'indirizzo IP specifico.
Tutte le righe cercate dovrebbero iniziare da 5.34.180.192
termine.
grep "^5.34.180.192" xaf
Corrispondenza alla fine della stringa
Aggiungi $
alla fine del pattern per trovare le righe che terminano con la stringa cercata:
grep "Chrome/62\" \"-\"$" xaf
Non appena la nostra stringa di ricerca contiene "
simboli, li sfuggiamo con il \
.
Ricerca con più pattern
Possiamo usare grep per cercare più pattern contemporaneamente. Aggiungi -e
argomento prima di ogni modello di ricerca:
grep -e "Chrome/62\" \"-\"$" -e "15/Mar/2021:08:35:23" xaf
Qui, stiamo cercando tutte le stringhe nel file che terminano con Chrome/62" "-"
E contengono data e ora specifiche 15/Mar/2021:08:35:23
.
Modifica del colore di output
Poiché l'output colorato aumenta la leggibilità, puoi cambiarlo nel tuo colore preferito impostando GREP_COLOR
variabile d'ambiente:
GREP_COLOR='1;35' grep --color=always 'admin' /etc/passwd
Puoi ottenere maggiori informazioni sulla variabile GREP_COLOR nella documentazione ufficiale di grep.
Riepilogo
Il comando grep è estremamente utile quando si tratta di filtrare il contenuto dei file di testo o dei risultati di output dei comandi. In questo articolo abbiamo trattato i comandi grep più comunemente usati, che semplificheranno la tua esperienza con la shell.
Speriamo che questo articolo ti sia stato utile. Se è così, per favore, aiutaci a diffonderlo nel mondo.