Grep

grep serve per trovare parole all'interno di files, puo' dirci non soo in che file si trovano, ma anche a che riga e cosa contengono le righe precedenti e quelle successive. Il comando grep e' uno dei piu' ostici da utilizzare perche' ha un sacco di opzioni da ricordare e le pagine info sono molto incasinate di collegamenti.

Per invocare grep bisogna utilizzare la seguente sintassi:

 grep [opzioni] 'espressione'  file_dove_cercare

Esempio

 $ grep -r gatto * 

In questo modo cerchera' in tutti i file della directory corrente e di tutte quelle contenute nella direcotry corrente la parola gatto.

Le opzioni sono tante, eccole descritte una per una:

  • -c : invece del normale output scrive il numero di linee che contengono l'espressione. Esempio:
 max@linux:~/Documents> grep -c mamma *
 3d:0
 latex:0
 viva_la_mamma:3
 addressbook.csv:1
  • -e PATTERN : si utilizza un'espressione regolare per cercare i files
  • -f FILE : il percorso viene preso dal FILE, line per linea
  • -i : ignora la differenza tra lettere maiuscole e minuscole sia nell'input che nell'output
  • -l : scrive solo il nome dei file che contengono la parola
  • -n : per ogni file scrive a che linea compare la parola. Esempio:
 max@linux:~/Documents/Latex/GuidaLin> grep -n casa *
 Guidalinux.tex:87:casa
 Guidalinux.tex:1293:le parole 'casa' e 'caso'.
  • -o : Scrive solo la parte della linea che corrisponde all'espressione regolare. Esempio:
 $ grep -o -e cas. * 
 Guidalinux.tex:casa 
 Guidalinux.tex:case 
 Guidalinux.tex:caso  
  • -q : non scrive nulla ma esce con zero se viene trovato qualcosa. (anche un errore)
  • -v :Inverte esattamente il significato delle cose da cercare, in mdo da avere come output le linee che non corrispondono all'espressione regolare.
  • -x : tutta la linea deve corrispondere alla linea cercata
  • -A NUMERO : Riporta un NUMERO di linee presenti nel file, oltre la linea trovata.
  • -B NUMERO : Riporta un NUMERO di linee presenti nel file, precedenti la linea trovata la linea trovata.
  • -C NUMERO : Riporta un NUMERO di linee presenti nel file, precedenti e seguenti la linea trovata la linea trovata.
  • -color : utilizza i colori per evidenziare le parole nell'output
  • -h : evita di scrivere il nome del file nell'output
  • -label=ETICHETTA : considera l'input come se provenisse tutto dal file di nome ETICHETTA (utile negli script).
  • -L : Stampa i file che non corrispondono
  • -r : Cerca ricorsivamente in tutte le directori a partire da quella in cui si comincia a cercare
  • -include=ESPRESSIONE : Verranno analizzati solo i file che rientrano nell'espressione
  • -exclude=ESPRESSIONE : Non verranno analizzati i file che rientrano nell'espressione
  • -m NUMERO : Blocca l'analisi di un file (per ogni file analizzato) dopo aver trovato un NUMERO di ricorrenze.

Esempi

Voglio sapere quante linee ha un file:

 $ grep -C "" miofile 
 18 

Voglio sapere in che linee e' contenuta la parola amore in tutti i file della cartella in cui mi trovo e tutte le sottodirectory:

 $ grep -r -n "amore" *
 prova:3:Roma e' la citta' dell'amore 
 poesia.txt:15:Amore mio sei tu che 
 poesia.txt:25:Si e' forte il mio amore 
 Documents/Italia.tex:7:Venezia e' la citta' dell'amore