Comando Grep in Linux/UNIX

Cosa è Grep

Grep, abbreviazione di “global regular expression print”, è un comando utilizzato per cercare e corrispondere a modelli di testo nei file contenuti nelle espressioni regolari. Inoltre, il comando è preinstallato in ogni distribuzione Linux. In questa guida, esamineremo gli utilizzi più comuni del comando grep, insieme ai casi d’uso popolari.

Comando Grep in Linux

Il comando Grep può essere utilizzato per trovare o cercare un’espressione regolare o una stringa in un file di testo. Per dimostrarlo, creiamo un file di testo welcome.txt e aggiungiamo un po’ di contenuto come mostrato.

Welcome to Linux !
Linux is a free and opensource Operating system that is mostly used by
developers and in production servers for hosting crucial components such as web
and database servers. Linux has also made a name for itself in PCs.
Beginners looking to experiment with Linux can get started with friendlier linux
distributions such as Ubuntu, Mint, Fedora and Elementary OS.

Ottimo! Ora siamo pronti a eseguire alcuni comandi grep e manipolare l’output per ottenere i risultati desiderati. Per cercare una stringa in un file, esegui il comando seguente Sintassi

$ grep "string" file name

OPPURE

$ filename grep "string"

Esempio:

$ grep "Linux" welcome.txt

Output Come puoi vedere, grep non ha solo cercato e corrisposto alla stringa “Linux”, ma ha anche stampato le linee in cui appare la stringa. Se il file si trova in un percorso diverso, assicurati di specificare il percorso del file come mostrato di seguito

$ grep "string" /path/to/file

Colorizzazione dei risultati di Grep utilizzando l’opzione –color

Se stai lavorando su un sistema che non visualizza la stringa di ricerca o il modello in un colore diverso dal resto del testo, utilizza l’opzione --color per far risaltare i tuoi risultati. Esempio

$ grep --color "free and opensource" welcome.txt 

Output

Ricerca di una stringa in modo ricorsivo in tutte le directory

Se desideri cercare una stringa nella tua directory corrente e in tutte le sottodirectory, esegui la ricerca utilizzando il flag - r come mostrato

$ grep -r "string-name" *

Per esempio

$ grep -r "linux" *

Output

Ignorare la sensibilità al caso

Nell’esempio sopra, i nostri risultati di ricerca ci hanno dato ciò che volevamo perché la stringa “Linux” era specificata in maiuscolo e esiste anche nel file in maiuscolo. Ora proviamo a cercare la stringa in minuscolo.

$ grep "linux" file name

Niente dall’output, giusto? Questo perché grep non è riuscito a trovare e a fare corrispondere la stringa “linux” poiché la prima lettera è minuscola. Per ignorare la sensibilità delle maiuscole e minuscole, utilizza il flag -i ed esegui il comando seguente

$ grep -i "linux" welcome.txt

Output Fantastico, vero? Il -i viene normalmente utilizzato per visualizzare le stringhe indipendentemente dalla loro sensibilità delle maiuscole e minuscole.

Contare le righe in cui le stringhe corrispondono con l’opzione -c

Per contare il numero totale di righe in cui il modello di stringa appare o risiede, esegui il comando seguente

$ grep -c "Linux" welcome.txt

Output

Utilizzare Grep per invertire l’output

Per invertire l’output di Grep, utilizza il flag -v. L’opzione -v istruisce grep a stampare tutte le righe che non contengono o corrispondono all’espressione. L’opzione -v indica a grep di invertire il suo output, il che significa che invece di stampare le righe corrispondenti, fa l’opposto e stampa tutte le righe che non corrispondono all’espressione. Tornando al nostro file, facciamo visualizzare i numeri di riga come mostrato. Premi ESC sull’editor Vim, digita due punti seguiti da

 set nu

. Successivamente, premi Invio. Output Ora, per visualizzare le righe che non contengono la stringa “Linux”, esegui

$ grep -v "Linux" welcome.txt

Output Come puoi vedere, grep ha visualizzato le righe che non contengono il modello di ricerca.

Numerare le righe che contengono il modello di ricerca con l’opzione -n

Per numerare le righe in cui il pattern di stringa è corrisposto, utilizza l’opzione -n come mostrato

$ grep -n "Linux" welcome.txt

Output

Cerca la corrispondenza esatta della parola utilizzando l’opzione -w

Passando quindi il flag -w verrà cercata la riga contenente la parola corrispondente esatta come mostrato

$ grep -w "opensource" welcome.txt

Output Tuttavia, se provi

$ grep -w "open" welcome.txt

NON verranno restituiti risultati perché non stiamo cercando un modello ma una parola esatta!

Utilizzo delle pipe con grep

Il comando grep può essere utilizzato insieme alle pipe per ottenere un output distinto. Ad esempio, Se vuoi sapere se un certo pacchetto è installato nel sistema Ubuntu esegui

$ dpkg -L | grep "package-name"

Ad esempio, per scoprire se OpenSSH è stato installato nel tuo sistema, esegui il comando dpkg -l con grep come mostrato

$ dpkg -L | grep -i "openssh"

Output

Visualizzazione del numero di righe prima o dopo un modello di ricerca Utilizzo delle barre verticali

Puoi utilizzare il -A o il -B per visualizzare il numero di righe che precedono o seguono la stringa di ricerca. Il flag -A indica le righe che seguono la stringa di ricerca e -B stampa l’output che appare prima della stringa di ricerca. Per esempio

$ ifconfig | grep -A 4 ens3

Questo comando visualizza la riga contenente la stringa più 4 righe di testo dopo la stringa ens nel comando ifconfig. Output Al contrario, nell’esempio sottostante, l’uso del flag -B visualizzerà la riga contenente la stringa di ricerca più 3 righe di testo prima della stringa ether nel comando ifconfig. Output

$ ifconfig | grep -B 4 ether

Utilizzo di grep con REGEX – espressioni regolari

Il termine REGEX è un acronimo per REGolare EXpressione. Un REGEX è una sequenza di caratteri utilizzata per individuare un modello. Di seguito sono riportati alcuni esempi:

^      Matches characters at the beginning of a line
$      Matches characters at the end of a line
"."    Matches any character
[a-z]  Matches any characters between A and Z
[^ ..] Matches anything apart from what is contained in the brackets

Esempio Per stampare le righe che iniziano con un certo carattere, la sintassi è;

grep ^character file_name

Ad esempio, per visualizzare le righe che iniziano con la lettera “d” nel nostro file welcome.txt, eseguiremmo

$ grep ^d welcome.txt 

Output Per visualizzare le righe che terminano con la lettera ‘x’ eseguire

$ grep x$ welcome.txt

Output

Ottenere aiuto con più opzioni Grep

Se hai bisogno di imparare di più sull’uso del comando Grep, esegui il comando qui sotto per ottenere un’anteprima delle altre bandiere o opzioni che puoi usare insieme al comando.

$ grep --help

Output di Esempio Apprezziamo il tuo tempo per aver letto questo tutorial. Sentiti libero di provare i comandi e farci sapere come è andata.

Source:
https://www.digitalocean.com/community/tutorials/grep-command-in-linux-unix