Spesso in un file di grandi dimensioni, devi cercare una riga di dati specifica sepolta da qualche parte nel mezzo del file. Invece di scorrere manualmente l'intero file, puoi lasciare che il comando grep ti cerchi. Il formato della riga di comando per il comando grep è:
# grep [options] pattern [file]
Il comando grep cerca nell'input o nel file specificato le righe che contengono caratteri che corrispondono al modello specificato. L'output di grep sono le righe che contengono il modello di corrispondenza. A causa della popolarità del comando grep, ha subito molti cambiamenti nello sviluppo nel corso della sua vita. Molte funzionalità sono state aggiunte al comando grep. Se guardi le pagine man per il comando grep, vedrai quanto è versatile.
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 $
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