Hai mai passato un pomeriggio intero a cercare di ripulire un file CSV con migliaia di righe? O a estrarre dati da un log di sistema lungo chilometri? Se gestisci server, e-commerce o anche solo il backup di database via terminale, sed e awk sono i due coltellini svizzeri che ti fanno risparmiare ore ogni settimana. Noi, di Meteora Web, li usiamo quotidianamente per manipolare configurazioni, trasformare export di magazzino e pulire dati prima di importarli in WooCommerce o nei nostri ERP custom. In questa guida vediamo esattamente come usarli, con esempi che funzionano subito.
Come risolve sed il problema della modifica massiva di file su Linux?
Sed (stream editor) è un editor non interattivo. Non apri il file in nano o vim: gli dici "trova questa stringa e sostituiscila" e lui lo fa su tutto il file, in una frazione di secondo. È perfetto per modifiche ripetitive su centinaia di file di configurazione, log, o dati strutturati.
Esempio pratico: sostituire una stringa su tutti i file di configurazione
Supponiamo che tu debba cambiare la versione di PHP in tutti i virtual host di Apache su un server con decine di siti. Con sed:
Sponsored Protocol
# Sostituisce 'php7.4' con 'php8.1' in tutti i file .conf ricorsivamente
find /etc/apache2/sites-available -name "*.conf" -exec sed -i 's/php7\.4/php8.1/g' {} \;
Il flag -i modifica il file in-place. Il pattern usa il punto letterale \. per non interpretarlo come "qualsiasi carattere".
Eliminare righe da un file CSV senza aprirlo
Immagina un export del gestionale che contiene righe di intestazione e totali da rimuovere. Con sed:
# Elimina la prima riga (header) e le righe che iniziano con 'Totale'
sed -i '1d;/^Totale/d' export.csv
1d cancella la prima riga; /^Totale/d cancella ogni riga che inizia con "Totale".
A cosa serve awk per l'elaborazione di file strutturati e log?
Awk è un linguaggio di programmazione pensato per l'estrazione e l'elaborazione di dati in formato tabellare. Se hai un file con colonne (spazi, tab, virgole), awk ti permette di analizzare, filtrare, aggregare e trasformare quei dati come un mini database SQL da terminale.
Esempio reale: analizzare log del server per trovare gli IP più frequenti
# Estrae il primo campo (IP) da un access log, conta occorrenze e ordina per frequenza
awk '{print $1}' /var/log/apache2/access.log | sort | uniq -c | sort -nr | head -10
Ogni riga del log è suddivisa in campi separati da spazio. $1 è il primo campo. Poi usiamo pipe per ordinare e contare. Con un cliente e-commerce abbiamo scoperto così un bot che scansionava prodotti migliaia di volte al giorno — lo abbiamo bloccato in 5 minuti.
Sponsored Protocol
Calcolare il totale di un CSV magazzino con awk
Un negozio di abbigliamento che seguiamo aveva un CSV con colonne: articolo, quantità, prezzo. Volevano il valore totale del magazzino. Con awk:
# Il CSV ha formato: nome,qta,prezzo
awk -F',' '{ totale += $2 * $3 } END { print "Valore totale magazzino: " totale " euro" }' magazzino.csv
Il -F',' imposta la virgola come separatore. La variabile totale si accumula riga per riga. L'azione END viene eseguita dopo l'ultima riga.
Quale scegliere tra sed e awk per un task di elaborazione testo su Linux?
Non c'è una risposta univoca. Noi ragioniamo in termini di complessità e struttura:
- Scegli sed se devi fare una sostituzione semplice o cancellare righe basandoti su un pattern testuale lineare. Sed è più veloce e ha sintassi minimal.
- Scegli awk se i tuoi dati hanno una struttura a campi (CSV, TSV, log), se devi fare calcoli, confronti o aggregazioni. Awk è più espressivo e gestisce facilmente condizioni multiple.
Molto spesso li combiniamo: puliamo con sed il formato grezzo e poi estraiamo con awk. Ad esempio, per preparare un file di feed per Google Shopping partendo da un export del gestionale, prima usiamo sed per rimuovere caratteri di controllo e intestazioni, poi awk per formattare le colonne secondo lo schema richiesto.
Sponsored Protocol
Come combinare sed e awk in uno script bash per automazione server
Lo scenario classico: ogni notte il server riceve un report CSV via FTP, deve essere processato e caricato in un database. Ecco uno script minimo che esegue l'intera pipeline:
#!/bin/bash
# Script di elaborazione notturna
INPUT="/home/data/report_lordo.csv"
OUTPUT="/home/data/report_pulito.csv"
# Rimuovi righe vuote e intestazioni con sed
sed -i '/^$/d;/^#/d' "$INPUT"
# Estrai solo le colonne 1,3,5 con awk e aggiungi intestazione
awk -F',' 'BEGIN { print "ID,Quantita,Prezzo" } { print $1 "," $3 "," $5 }' "$INPUT" > "$OUTPUT"
echo "Report processato: $OUTPUT"
Inseriscilo in un cron job e hai un flusso automatico, senza intervento manuale. Noi gestiamo così i feed di prodotti per diversi negozi online: sed toglie le impurità, awk normalizza i campi.
Sponsored Protocol
Errori comuni quando si usano sed e awk (e come evitarli)
1. Dimenticare il backup. Il flag -i in sed sovrascrive il file originale. Prima di lanciare modifiche massive, testa sempre senza -i (stampa a schermo). Oppure usa -i.bak per creare un backup automatico:
sed -i.bak 's/vecchio/nuovo/g' file.conf
2. Interpretare male i caratteri speciali. In sed, il punto . significa "qualsiasi carattere". Per un punto letterale devi escaparlo: \.. In awk, il backslash va raddoppiato nei pattern. Fai sempre un test su una riga campione.
3. Dimenticare il separatore di campo in awk. Di default awk separa per spazi e tab. Se il tuo file è CSV, usa -F',' o -F';'. Con log Apache, il separatore è lo spazio, quindi $1, $2 etc. funzionano direttamente.
Sponsored Protocol
4. Non usare le variabili d'ambiente nello script. Se devi passare un valore variabile (es. una data) a un comando sed o awk, usa le virgolette doppie per permettere l'espansione:
DATA="2026-01-15"
awk -F',' -v d="$DATA" '$1 == d { print }' log.csv
Il flag -v passa la variabile shell all'interno di awk.
Cosa fare adesso
- Prova sed su un file di test: prendi un file di log o un CSV, fai una sostituzione selettiva senza
-iper vedere l'output. - Estrai con awk le prime 10 righe di un log e conta i codici HTTP (es. 200, 404) — scoprirai subito Pagine Errore che Google ti segnala.
- Automatizza un task ripetitivo: scrivi uno script bash che ogni notte pulisce un export del tuo gestionale e lo salva pronto per l'import.
- Consulta la documentazione ufficiale: GNU sed manual e GNU awk manual.
- Leggi altri articoli correlati: la nostra guida principale su shell scripting e automazione Linux.
Ricorda: un comando ben piazzato oggi ti fa risparmiare ore domani. E se un tuo collaboratore dice "ma io li apro a mano in Excel", sorridi e mandagli questa guida.