Lo scopo di questo capitolo è presentare alcuni strumenti da linea di comando che possono tornare utili nell'uso quotidiano. Naturalmente potete saltare questo capitolo se intendete usare unicamente l'ambiente grafico, ma una rapida lettura potrebbe farvi cambiare opinione :-).
Questo capitolo non ha una vera e propria struttura, i comandi sono elencati così come capita, dal più comunemente usato al più oscuro. Ciascun comando sarà accompagnato da un esempio, ma la ricerca di altri usi interessanti per gli stessi comandi sarà lasciata a voi, come esercizio.
Va bene, il nome non è molto intuitivo, e non lo è neanche l'acronimo, ma il suo scopo è semplice: cercare in uno o più file un modello ("pattern") immesso come argomento. La sua sintassi è:
grep [opzioni] <schema> [uno o più file] |
Se indicate più file insieme, prima di ciascuna riga del risultato sarà mostrato il nome del file corrispondente. Usate l'opzione -h per evitare che i nomi dei file siano mostrati; usate invece l'opzione -l per ottenere solo i nomi dei file in cui sono state trovate corrispondenze. Quest'ultima opzione può essere utile, specialmente con lunghe liste di argomenti, per analizzare i file con un ciclo di shell e usare il trucchetto grep <modello> <nomefile> /dev/null. Il modello è una espressione regolare, sebbene la maggior parte delle volte si tratti di una semplice parola. Le opzioni usate più di frequente sono le seguenti:
-i: Fa una ricerca che non distingue fra maiuscole e minuscole.
-v: Inverte la ricerca: mostra le righe che non contengono corrispondenze.
-n: Mostra il numero di riga per ogni riga in cui viene trovata una corrispondenza.
-w: Dice a grep che il modello deve corrispondere a una parola intera.
Ecco un esempio di come usarlo:
$ cat my_father Hello dad Hi daddy So long dad # Cerca la stringa "hi", nessuna differenza tra maiuscole e minuscole $ grep -i hi my_father Hi daddy # Cerca la stringa "dad" come parola intera, e stampa # il numero di riga prima di ogni occorrenza $ grep -nw dad my_father 1:Hello dad 3:So long dad # Adesso vogliamo tutte le righe che non cominciano con "H" $ grep -v "^H" my_father So long dad $ |
Se volete usare grep in una pipe non dovete indicare il nome di un file, poiché come comportamento predefinito il comando preleva il suo ingresso dallo standard input. Allo stesso modo, come comportamento predefinito, il comando stampa il risultato sullo standard output, quindi potete redirigere l'output di un grep verso un altro programma senza alcun problema. Ad esempio:
$ cat /usr/doc/HOWTO/Parallel-Processing-HOWTO | \ grep -n thread | less |