grep
grep cerca righe che contengono un testo o un'espressione regolare, in uno o più file o nell'output di altri comandi.
Sintassi
grep [opzioni] "modello" [file...]
Esempi base
grep "errore" log.txt
grep -i "errore" log.txt
grep -n "errore" log.txt
grep -c "errore" log.txt
grep -v "errore" log.txt
grep -w "root" /etc/passwd
Opzioni utili
| Opzione | Significato |
|---|---|
-i | Ignora maiuscole/minuscole |
-n | Mostra il numero di riga |
-c | Conta le righe corrispondenti |
-v | Inverte: mostra le righe che NON corrispondono |
-w | Cerca solo parole intere |
-r | Ricorsivo nelle cartelle |
-l | Mostra solo i nomi dei file che contengono il testo |
-L | Mostra i file che NON lo contengono |
-o | Stampa solo la parte che corrisponde |
-E | Espressioni regolari estese |
-A n | Mostra anche n righe dopo la corrispondenza |
-B n | Mostra anche n righe prima |
-C n | Mostra n righe prima e dopo |
--color | Evidenzia le corrispondenze |
Cercare in una cartella
grep -rn "password" /etc/
grep -rl "TODO" ~/progetti
grep -r --include="*.php" "mysqli" .
grep -r --exclude-dir=".git" "chiave" .
Con le pipe
ps aux | grep nginx
dmesg | grep -i usb
journalctl -u ssh | grep "Failed"
Per evitare che grep trovi se stesso in ps aux:
ps aux | grep "[n]ginx"
Espressioni regolari
grep "^root" /etc/passwd
grep "bash$" /etc/passwd
grep -E "errore|warning" log.txt
grep -E "^[0-9]{3}-[0-9]{4}$" numeri.txt
grep -E "([0-9]{1,3}\.){3}[0-9]{1,3}" log.txt
| Simbolo | Significato |
|---|---|
^ | Inizio riga |
$ | Fine riga |
. | Un carattere qualsiasi |
* | Zero o più ripetizioni |
[abc] | Uno dei caratteri indicati |
Con -E l'alternativa si scrive a|b.
Estrarre indirizzi IP da un log
grep -oE "([0-9]{1,3}\.){3}[0-9]{1,3}" access.log | sort | uniq -c | sort -rn | head
Codice di uscita
grep restituisce 0 se trova qualcosa, 1 se non trova nulla. Utile negli script:
if grep -q "chiave" file.conf; then
echo "trovata"
fi