Il comando grep, nella sua forma più elementare, è uno strumento di ricerca. A differenza di trova o individua, non si limita alla ricerca di nomi di file; viene spesso utilizzato per cercare nel contenuto di un file una particolare stringa di testo. Come output, grep mostra ogni riga intera del file in cui è stato trovato il tuo modello di ricerca. In questo modo, puoi usare grep sia per elaborare un file di testo che per leggere i contenuti che sono più pertinenti per te. Ad esempio, potresti voler controllare gli eventi di accesso di un utente esaminando un registro di accesso. Invece di leggere l'intero registro o scorrere un termine di ricerca in un editor di testo, puoi semplicemente stampare tutte le righe pertinenti sullo schermo con il comando grep.
Sintassi
La sintassi del comando grep è:
# grep [options] {search pattern} {file names}
Utilizzo di grep per trovare i file
Oltre a cercare il contenuto dei file, puoi usare grep per cercare in una directory al fine di individuare un determinato file. Ls -l | Il comando grep audit restituisce un lungo elenco di tutti i file nella directory corrente il cui nome contiene "audit".
Se vuoi invertire la ricerca (righe di output che non corrispondono allo schema), usa il parametro -v:
$ grep -v t file1 one four five $
Se hai bisogno di trovare i numeri di riga in cui si trovano i modelli corrispondenti, usa il parametro -n:
$ grep -n t file1 2:two 3:three $
Se hai solo bisogno di vedere un conteggio di quante righe contengono il modello corrispondente, usa il parametro -c:
$ grep -c t file1 2 $
Se devi specificare più di un pattern corrispondente, usa il parametro -e per specificare ogni singolo pattern:
$ grep -e t -e f file1 two three four five $
Se si verifica l'errore seguente durante l'esecuzione del comando grep:
grep: command not found
puoi provare a installare il pacchetto seguente secondo la tua scelta di distribuzione:
Distribuzione del sistema operativo | Comando |
---|---|
OS X | brew install grep |
Debian | apt-get install grep |
Ubuntu | apt-get install grep |
Alpino | apk aggiungi grep |
Arci Linux | pacman -S grep |
Kali Linux | apt-get install grep |
CentOS | yum install grep |
Fedora | dnf install grep |
Raspbian | apt-get install grep |
Esempi di comando grep
1. Per interpretare PATTERN come un'espressione regolare estesa:
# grep --extended-regexp PATTERN # grep -E PATTERN
2. Per interpretare PATTERN come un elenco di stringhe fisse:
# grep -F PATTERN # grep --fixed-strings PATTERN
3. Per interpretare PATTERN come un'espressione regolare di base:
# grep -G PATTERN # grep --basic-regexp PATTERN
4. Per interpretare PATTERN come un'espressione regolare Perl:
# grep -P PATTERN # grep --perl-regexp PATTERN
5. Per utilizzare PATTERN come motivo:
# grep -e PATTERN, # grep --regexp=PATTERN
6. Per ottenere motivi da FILE, uno per riga:
# grep -f FILE, --file=FILE
7. Per ignorare le distinzioni tra maiuscole e minuscole sia nel PATTERN che nei file di input:
# grep -i PATTERN # grep --ignore-case PATTERN
8. Per invertire il senso di corrispondenza, per selezionare le righe non corrispondenti:
# grep -v PATTERN # grep --invert-match PATTERN
9. Per selezionare solo quelle righe contenenti corrispondenze che formano parole intere:
# grep -w PATTERN # grep --word-regexp PATTERN
10. Per selezionare solo quelle corrispondenze che corrispondono esattamente all'intera riga:
# grep -x PATTERN # grep --line-regexp PATTERN
11. Per ignorare il caso:
# grep -y PATTERN
12. Per sopprimere l'uscita normale; stampa invece un conteggio delle righe corrispondenti:
# grep -c PATTERN # grep --count PATTERN
13. Per visualizzare a colori:
# grep --color PATTERN
14. Per sopprimere l'uscita normale; stampa invece il nome di ogni file di input, da out non sarà previsto:
# grep -L # grep --files-without-match
15. Per sopprimere l'uscita normale; stampa invece il nome di ogni file di input da cui sono stati stampati gli output:
# grep -l # grep --files-with-matches
16. Silenzio; non scrivere nulla sullo standard output Esci immediatamente con stato zero se viene trovata una corrispondenza:
# grep -q # grep --quiet # grep --silent
17. Per interrompere la lettura di un file dopo NUM righe corrispondenti:
# grep -m NUM # grep --max-count=NUM
18. Per stampare solo le parti corrispondenti (non vuote) di una riga corrispondente:
# grep -o PATTERN # grep --only-matching PATTERN
19. Per eliminare i messaggi di errore relativi a file inesistenti o illeggibili:
# grep -s PATTERN # grep --no-messages PATTERN
20. Per stampare l'offset di byte in base 0 all'interno del file di input prima di ogni riga di output:
# grep -b PATTERN # grep --byte-offset PATTERN
21. Per stampare il nome del file per ogni corrispondenza:
# grep -H PATTERN # grep --with-filename PATTERN
22. Per eliminare il prefisso dei nomi di file sull'output:
# grep -h PATTERN # grep --no-filename PATTERN
23. Per visualizzare l'input effettivamente proveniente dallo standard input come input proveniente dal file LABEL:
# grep -cd PATTERN | grep --label=mysearch -H PATTERN
24. Per anteporre a ciascuna riga di output il numero di riga in base 1 all'interno del relativo file di input:
# grep -n PATTERN # grep --line-number PATTERN
25. Per assicurarsi che il primo carattere del contenuto effettivo della riga si trovi su un punto di tabulazione:
# grep -T PATTERN # grep --initial-tab PATTERN
26. Per segnalare gli offset dei byte in stile Unix:
# grep -u PATTERN # grep --unix-byte-offsets PATTERN
27. Per emettere uno zero byte invece del carattere che normalmente segue un nome di file:
# grep -Z PATTERN # grep --null PATTERN
28. Per stampare NUM righe di contesto finale dopo le righe corrispondenti:
# grep -A NUM PATTERN # grep --after-context=NUM PATTERN
29. Per stampare NUM righe di contesto iniziale prima delle righe corrispondenti:
# grep -B NUM PATTERN # grep --before-context=NUM PATTERN
30. Per stampare NUM righe di contesto di output:
# grep -C NUM PATTERN # grep --context=NUM PATTERN
31. Per elaborare un file binario come se fosse testo:
# grep -a PATTERN /tmp/bin # grep -text PATTERN /tmp/bin
32. Per assumere che il file sia di tipo TYPE:
# grep --binary-files=TYPE PATTERN
33. Se un file di input è un dispositivo, FIFO o socket, usa ACTION per elaborarlo:
# grep -D ACTION PATTERN # grep --devices=ACTION PATTERN
34. Se un file di input è una directory, utilizzare ACTION per elaborarlo:
# grep -d ACTION PATTERN # grep --directories=ACTION PATTERN
35. Per saltare i file il cui nome di base corrisponde a GLOB:
# grep --exclude=GLOB PATTERN
36. Per ignorare i file il cui nome di base corrisponde a uno qualsiasi dei glob di nomi file letti da FILE:
# grep --exclude-from=FILE PATTERN
37. Per escludere le directory che corrispondono al pattern DIR dalle ricerche ricorsive:
# grep --exclude-dir=DIR PATTERN
38. Per elaborare un file binario come se non contenesse dati corrispondenti:
# grep -I PATTERN
39. Per cercare solo i file il cui nome di base corrisponde a GLOB:
# grep --include=GLOB
40. Per leggere tutti i file in ogni directory, ricorsivamente:
# grep -r PATTERN # grep -R PATTERN
41. Per utilizzare il buffer di riga sull'output:
# grep --line-buffered PATTERN
42. Se possibile, usa la chiamata di sistema mmap per leggere l'input, invece della lettura predefinita:
# grep --mmap PATTERN
43. Per trattare i file come binari:
# grep -U /tmp/file PATTERN # grep --binary /tmp/file PATTERN
44. Per trattare l'input come un insieme di righe:
# grep -z PATTERN # grep --null-data PATTERN
45. Per visualizzare la guida:
# grep -h
46. Per stampare il numero di versione di grep:
# grep -V