Vai al contenuto
eLearner.app
Modulo 3 · Lezione 2 di 27/11 nel corso~15 min
Lezioni del modulo (2/2)

Pipeline e filtri (grep e |)

Una delle caratteristiche più potenti della riga di comando di Linux è la capacità di collegare comandi diversi in modo che l'output di uno diventi l'input di quello successivo. Questa tecnica si realizza tramite le pipeline ed è supportata dal comando di filtraggio grep.


Il filtro di testo: grep

Il comando grep (Global Regular Expression Print) cerca del testo specifico all'interno di uno o più file e stampa a schermo le righe corrispondenti:

Bash
grep "parola" [nome_file]

Opzioni utili per grep

  • grep -i "errore" server.log: Effettua una ricerca case-insensitive (ignora la differenza tra maiuscole e minuscole, trovando sia "Errore" che "ERROR").
  • grep -n "connessione" server.log: Mostra anche il numero di riga corrispondente nel file.
  • grep -v "INFO" server.log: Inverte la ricerca, mostrando solo le righe che non contengono la parola specificata.

Incanalare i comandi: La Pipeline |

L'operatore pipeline è rappresentato dalla barra verticale |. Consente di inviare lo standard output del comando a sinistra direttamente allo standard input del comando a destra:

Bash
[comando1] | [comando2]

Ad esempio, se un file di log è enorme e vuoi cercare una parola senza aprirlo tutto, puoi combinare cat e grep:

Bash
cat logs/server.log | grep ERROR

Questo comando legge l'intero file server.log con cat, ma invece di stamparlo a schermo lo passa a grep, che estrarrà e mostrerà solo le righe contenenti la parola "ERROR".


Esempi d'Uso ed Errori Comuni

Se esegui una ricerca per una parola usando lettere minuscole (es. "post") su un file che contiene solo lettere maiuscole (es. "POST"), grep non restituirà nulla:

Bash
grep "post" logs/access.log
# Output: (nessun risultato, la ricerca è case-sensitive di default)

Per trovare la riga indipendentemente da come è scritta, usa il flag -i:

Bash
grep -i "post" logs/access.log
# Output:
# 127.0.0.1 - - [22/May/2026:10:10:00 +0000] "POST /login HTTP/1.1" 401 234

Se il file specificato non esiste, grep restituirà un errore:

Bash
grep "ERROR" file_inesistente.log
# Output:
# grep: file_inesistente.log: No such file or directory

Prova tu

Esercizio 1: Cerca errori nei log

Esercizio#linux.m3.l2.e1
Tentativi: 0Caricamento…

Filtra il file 'logs/server.log' per estrarre e mostrare solo le righe che contengono la parola 'ERROR' (in maiuscolo).

Caricamento editor…
Mostra suggerimento

Usa il comando grep seguito dalla parola da cercare e dal percorso del file.

Soluzione disponibile dopo 3 tentativi

Esercizio 2: Pipeline e filtri

Esercizio#linux.m3.l2.e2
Tentativi: 0Caricamento…

Usa il comando cat per leggere il file 'logs/server.log' e incanala il suo output tramite una pipeline (|) verso il comando grep per filtrare e stampare solo le righe che contengono la parola 'WARNING'.

Caricamento editor…
Mostra suggerimento

Collega cat logs/server.log a grep WARNING usando il carattere pipe '|'.

Soluzione disponibile dopo 3 tentativi

Esercizio 3: Ricerca case-insensitive

Esercizio#linux.m3.l2.e3
Tentativi: 0Caricamento…

Cerca tutte le righe che contengono la parola 'post' (sia maiuscola che minuscola) all'interno del file 'logs/access.log' usando il flag opportuno di grep.

Caricamento editor…
Mostra suggerimento

Usa grep con l'opzione -i per ignorare la differenza tra maiuscole e minuscole.

Soluzione disponibile dopo 3 tentativi