12 Esempi pratici del comando Linux Grep

Ti sei mai trovato nella situazione di dover cercare una stringa o un modello specifico in un file, senza sapere da dove iniziare? In questo caso, il comando grep viene in tuo soccorso!

grep è un potente strumento di ricerca di modelli nei file, disponibile in tutte le distribuzioni di Linux. Se per qualsiasi motivo non è installato sul tuo sistema, puoi facilmente installarlo tramite il tuo package manager, come mostrato di seguito.

$ sudo apt install grep         [On Debian, Ubuntu and Mint]
$ sudo yum install grep         [On RHEL/CentOS/Fedora and Rocky Linux/AlmaLinux]
$ sudo emerge -a sys-apps/grep  [On Gentoo Linux]
$ sudo apk add grep             [On Alpine Linux]
$ sudo pacman -S grep           [On Arch Linux]
$ sudo zypper install grep      [On OpenSUSE]    

I have found that the easiest way to get your feet wet with the grep command is to just dive right in and use some real-world examples.

1. Cerca e trova file in Linux

Supponiamo che tu abbia appena installato una nuova versione di Ubuntu sul tuo computer e che tu voglia provare a scrivere script in Python.

Hai cercato tutorial sul web, ma hai notato che esistono due versioni diverse di Python e non sai quale versione di Python sia stata installata con Ubuntu, o se siano stati installati eventuali moduli.

Esegui semplicemente il seguente comando dpkg con grep come mostrato:

dpkg -l | grep -i python
Finding Files with Grep Command

Prima di tutto, abbiamo eseguito dpkg –l, che elenca i pacchetti *.deb installati nel sistema. In secondo luogo, abbiamo reindirizzato tale output a grep -i python, il che significa semplicemente “vai a grep e filtra e restituisci tutto ciò che contiene ‘python‘”.

L’opzione -i è lì per ignorare il caso, poiché grep fa distinzione tra maiuscole e minuscole. Utilizzare l’opzione -i è una buona abitudine a meno che, ovviamente, non si stia cercando di raffinare una ricerca più specifica.

2. Ricerca e Filtraggio dei File in Linux

Il grep può anche essere utilizzato per cercare e filtrare all’interno di file singoli o multipli. Prendiamo questo scenario:

Stai avendo qualche problema con il tuo Server Web Apache, e ti sei rivolto a uno dei tanti fantastici forum su Internet chiedendo aiuto.

La persona gentile che ti risponde ti ha chiesto di pubblicare il contenuto del tuo file /etc/apache2/apache2.conf. Non sarebbe più facile per te, per il ragazzo che ti sta aiutando e per chiunque lo stia leggendo se potessi rimuovere tutte le righe commentate? Beh, puoi! Basta eseguire questo:

grep -v ^\# /etc/apache2/apache2.conf | grep .

L’opzione -v dice a grep di invertire il suo output, il che significa che invece di stampare le righe corrispondenti, fare l’opposto e stampare tutte le righe che non corrispondono all’espressione, in questo caso, le righe commentate con #.

Nota che abbiamo anche utilizzato grep . alla fine per nascondere l’output di tutte le righe vuote. In questo modo vediamo solo le impostazioni di configurazione nel nostro terminale.

Print Uncommented Lines in Linux

3. Trova tutti i file .mp3 in Linux

Il comando grep può essere molto utile per filtrare da stdout. Ad esempio, diciamo che hai un’intera cartella piena di file musicali in diversi formati.

Vuoi trovare tutti i file *.mp3 dell’artista JayZ, ma non vuoi nessuna delle tracce remixate. Utilizzando un comando find con un paio di tubi grep farà al caso tuo:

# find . -name “*.mp3” | grep –i JayZ | grep –vi “remix”

In questo esempio, stiamo utilizzando find per stampare tutti i file con estensione *.mp3, inviandoli a grep –i per filtrare e stampare tutti i file con il nome “JayZ” e poi un altro tubo a grep –vi che filtra e non stampa tutti i nomi dei file con la stringa (in qualsiasi caso) “remix“.

[ Potrebbe interessarti anche: 35 Esempi Pratici del Comando Find di Linux ]

4. Visualizza il Numero di Righe Prima o Dopo la Stringa di Ricerca

Altre due opzioni sono gli interruttori -A e -B, che mostrano la riga corrispondente e un numero di righe prima o dopo la stringa di ricerca.

Mentre la pagina man fornisce una spiegazione più dettagliata, trovo più facile ricordare le opzioni come -A = dopo e -B = prima:

ifconfig | grep -A 4 inet
ifconfig | grep -B 2 UP
Print Number of Lines Before and After String

5. Stampa il numero di righe intorno alla corrispondenza

L’opzione -C di grep è simile, ma invece di stampare le righe che vengono prima o dopo la stringa, stampa le righe in entrambe le direzioni:

# ifconfig | grep -C 2 lo

 TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 15314  bytes 1593769 (1.5 MB)
        RX errors 0  dropped 0  overruns 0  frame 0

6. Conta il numero di corrispondenze

Simile al piping di una stringa grep al conteggio delle parole (comando wc), l’opzione integrata di grep può fare lo stesso per te:

# ifconfig | grep -c inet6

7. Cerca file per stringa data in Linux

L’opzione -n per grep è molto utile durante il debug dei file durante gli errori di compilazione. Visualizza il numero di riga nel file della stringa di ricerca data:

# grep -n "main" setup.py

8. Cerca una stringa in modo ricorsivo in tutte le directory

Se vuoi cercare una stringa nella directory corrente insieme a tutte le sottodirectory, puoi specificare l’opzione -r per cercare in modo ricorsivo:

# grep -r “function” *

9. Cerca l’intero modello

Passare l’opzione -w a grep cerca l’intero modello che è nella stringa. Ad esempio, usando:

# ifconfig | grep -w "RUNNING"

Verrà stampata la riga contenente il modello tra virgolette. D’altra parte, se provi:

# ifconfig | grep -w "RUN"
Find Entire Pattern

Non verrà restituito nulla poiché non stiamo cercando un modello, ma una parola intera.

10. Cerca una stringa nei file compressi Gzipped

Meritano una menzione alcune derivate di grep. La prima è zgrep, che, simile a zcat, è per l’uso su file gzipped. Prende le stesse opzioni di grep ed è utilizzata allo stesso modo:

# zgrep -i error /var/log/syslog.2.gz
Search String in Gzipped Files

11. Corrispondenza delle Espressioni Regolari nei File

Il comando egrep è un’altra derivata che sta per “Espressione Regolare Globale Estesa”. Riconosce ulteriori meta-caratteri di espressione come at + ? | e ().

Il comando egrep è molto utile per la ricerca nei file sorgente e in altre parti di codice, qualora ce ne sia bisogno. Può essere invocato dal solito grep specificando l’opzione -E.

grep -E

12. Cerca una Stringa a Pattern Fisso

Il comando fgrep cerca un file o un elenco di file per una stringa a pattern fisso. È lo stesso di grep -F. Un modo comune di utilizzare fgrep è passargli un file di pattern:

fgrep –f file_full_of_patterns.txt file_to_search.txt

Questo è solo un punto di partenza con grep, ma come probabilmente puoi vedere, è inestimabile per una varietà di scopi. Oltre ai semplici comandi di una riga che abbiamo implementato, grep può essere usato per scrivere potenti lavori cron e robusti script shell, per cominciare.

Sii creativo, sperimenta con le opzioni nella pagina man, e crea espressioni grep che servano ai tuoi scopi!

Source:
https://www.tecmint.com/12-practical-examples-of-linux-grep-command/