In questo articolo tratto in maniera estremamente introduttiva i tre comandi fondamentali per lβelaborazione dei file in Linux, estremamente utili per la ricerca e lβelaborazione di file tramite terminale.
1. Grep
Grep
viene utilizzato per cercare un termine specifico allβinterno di un file.
Questo comando Γ¨ molto utile quando voglio cercare velocemente le linee di un file (o genericamente di uno stream in uscita da un comando) che matchano una certa espressione.
Può fornire inoltre informazioni aggiuntive, come il numero di righe, il numero di match, il nome del file e così via.
Per esempio posso scrivere
$ grep This file.txt
Every line containing "This"
Every line containing "This"
che cerca tutte le linee contenute nel file file.txt
che contengono la parola This
.
Eβ importante sottolineare che il comando grep supporta nativamente le espressioni regolari.
Eβ possibile evitare lβescaping dei caratteri speciali per le regexp usando lβopzione -E
.
1.1 Opzioni utili
opzione | significato |
---|---|
-i | Case insensitive |
-w | whole word: cerca solo parole intere e non sottostringhe |
-R | ricerca ricorsiva tra i file di un path |
-v | Inverso: mostra le linee che non matchano |
-c | Count: conta le linee che matchano |
-l | mostra solo il nome del file che matcha |
-o | Mostra solo il contenuto matchato e non tutta la linea |
-n | Mostra anche il numero di linea oltre che allβoutput standard |
-E | Extended regexp: permette lβutilizzo di caratteri per regexp [()... ] senza usare lβescape |
Un esempio di comando grep comodo Γ¨ il
grep -Rin pattern path/to/search
che permette di ricercare ricorsivamente tra tutti i file e le sottodirectory del path indicato, un determinato pattern, case insensitive ed indicandone il numero di riga.
2. Awk
awk
(come sed
) Γ¨ completamente diverso da grep in quanto Γ¨ un processore di testo: conseguentemente non ha solo lβabilitΓ di trovare una espressione che sto cercando allβinterno di un testo, ma possono anche **rimuovere, aggiungere e modificare il testo del file stesso.
awk viene usato in particolare per estrarre dati e reportistica**.
In particolare awk
Γ¨ un intero linguaggio di programmazione costruito originariamente attorno ai file CSV, Γ¨ molto potente ma Γ¨ complesso da usare, soprattutto per i task semplici.
Un esempio Γ¨ il seguente
$ awk '{print $2}' file.txt
che permette di printare la seconda colonna del file file.txt
.
awk
permette di eseguire compiti molto complessi, per esempio assumiamo di avere il file file.txt
che contiene i numeri 10, 20, 60.
Il seguente codice permette di ottenere il valore medio dei numeri contenuti in tale file
$ awk 'BEGIN {sum=0; count=0; OFS="\t"} {sum+=$2; count++} END {print "Average:", sum/count}' file.txt
Average: 30
3. Sed
sed
(come awk
) Γ¨ un processore di testo. Risulta molto utile quando voglio eseguire dei cambiamenti nel contenuto di un file secondo una determinata espressione regolare.
Eβ meno espressivo di awk ma Γ¨ piΓΉ semplice da usare, soprattutto per i compiti piccoli.
Per esempio il seguente codice
$ sed -i 's/cat/dog/' file.txt
permette di sostituire tutte le occorrenze di βcatβ con βdogβ.