Utilizzo Base
Eseguire grep
grep "pattern" file.txt # cerca nel file grep "error" *.log # cerca in più file grep "hello" file1.txt file2.txt # lista file esplicita cat file.txt | grep "pattern" # input da pipe dmesg | grep -i "usb" # filtra output comandi
Flag Comuni
-iCorrispondenza case-insensitive
-vInverti corrispondenza — stampa righe non corrispondenti
-cStampa il conteggio delle righe corrispondenti
-nMostra i numeri di riga
-lElenca solo i nomi dei file con corrispondenze
-LElenca i nomi dei file senza corrispondenze
-wCorrisponde solo a parole intere
-xCorrisponde solo a righe intere
Pattern Regex
Espressioni Regolari Base (BRE)
.Qualsiasi singolo carattere
*Zero o più dell'elemento precedente
^Inizio riga
$Fine riga
[abc]Classe caratteri — uno qualsiasi tra a, b, c
[^abc]Classe negata — qualsiasi tranne a, b, c
[a-z]Intervallo — lettere minuscole
\<, \>Confini di parola (GNU)
\( \), \1Gruppo di cattura e back-reference
Esempi BRE
grep '^#' file.conf # righe che iniziano con # grep 'error$' file.log # righe che terminano con error grep '^$' file.txt # righe vuote grep 'col[ou]r' file.txt # corrisponde a color o colour
Regex Estesa
Espressioni Regolari Estese (ERE)
+Uno o più dell'elemento precedente
?Zero o uno dell'elemento precedente
{n}Esattamente n ripetizioni
{n,m}Tra n e m ripetizioni
(a|b)Alternanza — corrisponde a a o b
( )Raggruppamento (senza backslash)
Esempi ERE
grep -E '[0-9]{3}-[0-9]{4}' f # pattern numero di telefono grep -E '(error|warn|fatal)' f # pattern multipli grep -E '^[A-Z][a-z]+' f # parole con iniziale maiuscola grep -P '\d{1,3}\.\d{1,3}' f # regex Perl: frammenti IP
Righe di Contesto
Esempi Contesto
grep -B 3 "error" app.log # 3 righe prima della corrispondenza grep -A 5 "FAIL" test.log # 5 righe dopo la corrispondenza grep -C 2 "crash" kern.log # 2 righe prima e dopo grep --group-separator="---" -C 1 "err" f # separatore personalizzato
Flag Contesto
-B NMostra N righe prima di ogni corrispondenza
-A NMostra N righe dopo ogni corrispondenza
-C NMostra N righe prima e dopo (contesto)
--group-separator=strSeparatore tra gruppi di corrispondenze (default --)
--color=autoEvidenzia le corrispondenze nel terminale
Ricerca Ricorsiva
Esempi Ricorsivi
grep -r "TODO" . # ricorsivo dalla directory corrente grep -rn "FIXME" src/ # ricorsivo con numeri di riga grep -r --include="*.py" "import" . # solo file .py grep -r --exclude="*.log" "error" . # salta file .log grep -r --exclude-dir=node_modules "require" .
Flag Ricorsivi
-r / --recursiveCerca ricorsivamente nelle directory
-RCome -r ma segue i link simbolici
--include=globCerca solo nei file corrispondenti al glob
--exclude=globSalta i file corrispondenti al glob
--exclude-dir=dirSalta le directory corrispondenti al nome
--include-dir=dirCerca solo nelle directory corrispondenti
Conteggio ed Elenco
Esempi Conteggio ed Elenco
grep -c "error" *.log # conta corrispondenze per file grep -l "TODO" src/*.py # elenca file con TODO grep -L "test" src/*.py # file senza "test" grep -o "http[^ ]*" page.html # estrai solo le parti corrispondenti grep -c '' file.txt # conta righe totali (come wc -l)
Flag Output
-cStampa il conteggio delle righe corrispondenti per file
-lStampa solo i nomi dei file con corrispondenze
-LStampa solo i nomi dei file senza corrispondenze
-oStampa solo le parti corrispondenti delle righe
-H / -hMostra / nasconde il prefisso del nome file
-ZOutput delimitato da null (per xargs -0)
Corrispondenza Inversa
Inverti ed Escludi
grep -v "^#" config.conf # rimuovi righe di commento grep -v "^$" file.txt # rimuovi righe vuote grep -v -e "debug" -e "trace" app.log # escludi due pattern grep -v "pattern" f | grep "other" # catena: NON A, poi B
Strategie di Filtraggio
-vInverti corrispondenza — seleziona righe non corrispondenti
-v con -eEscludi pattern multipli
catena pipeConcatena chiamate grep per filtraggio complesso
grep -v '^$' | grep -v '^#'Rimuovi righe vuote e commenti
-v con -cConta righe non corrispondenti
Pattern Multipli
Esempi Pattern Multipli
grep -e "error" -e "warning" app.log grep -E "error|warning|fatal" app.log grep -f patterns.txt file.txt # pattern da file grep -w -e "GET" -e "POST" access.log
Opzioni Pattern
-e patternSpecifica un pattern (uso multiplo)
-f fileLegge pattern da file (uno per riga)
-E 'a|b|c'Alternanza ERE per pattern multipli
-FStringhe fisse — nessuna regex, corrispondenza più veloce
-GRegex base (modalità predefinita)
-PRegex compatibile Perl (PCRE)
Performance
Consigli sulle Performance
-F (fgrep)Modalità stringa fissa — più veloce per stringhe letterali
LC_ALL=C grepBypassa la localizzazione per un aumento 2-10x su dati ASCII
--include/--excludeRiduci i file da cercare prima di aprirli
-m NFerma dopo N corrispondenze per file
-qModalità silenziosa — esce alla prima corrispondenza (per script)
ripgrep (rg)Sostituto diretto; più veloce su grandi repository
Esempi di Performance
LC_ALL=C grep -F "exact string" huge.log grep -r -m 1 "needle" /var/log/ # ferma dopo il primo risultato grep -rq "pattern" . && echo "found" # test booleano grep -r --include="*.go" "func main" .
Pattern Comuni
One-Liner
grep -rn "TODO\|FIXME\|HACK" src/ # trova marcatori codice grep -oP '(?<=")[^"]+(?=")' f # estrai stringhe tra virgolette grep -E '^\s*$' f | wc -l # conta righe vuote grep -c '' *.py | sort -t: -k2 -rn # ordina file per conteggio righe grep -rn --include="*.yaml" "password" . # audit per segreti
Ricette
Indirizzi IPgrep -oE '[0-9]{1,3}(\.[0-9]{1,3}){3}'
Indirizzi emailgrep -oE '[a-zA-Z0-9._%+-]+@[a-z.-]+'
URLgrep -oE 'https?://[^ ]+'
Righe tra marcatorigrep -A999 'START' f | grep -B999 'END'
Corrispondenze univochegrep -oE 'pattern' f | sort -u
Conteggio per patterngrep -c 'pat1' f; grep -c 'pat2' f