Manipolazione avanzata del testo (sed, awk)
Esplori «sed» per l’editing dei flussi e «awk» per l’elaborazione avanzata del testo, la ricerca di pattern e l’estrazione dei dati.
Manipolazione avanzata del testo (sed, awk) è una lezione Linux Command Line & Bash Scripting Mastery gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Linux Command Line & Bash Scripting Mastery, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Linux Command Line & Bash Scripting Mastery include 4 lezioni in totale.
Modificare i flussi con sed
sed, abbreviazione di «stream editor», è una potente utility da riga di comando per analizzare e trasformare il testo. Elabora i flussi di testo riga per riga. Può considerarlo un editor di testo non interattivo.
sed legge una riga, applica un comando (come una sostituzione o un'eliminazione), stampa il risultato e passa quindi alla riga successiva. Questo lo rende molto efficiente per i file di grandi dimensioni o per i dati passati tramite pipe.
Sostituzione semplice del testo
L'uso più comune di sed è la sostituzione del testo. Si usa il comando s, seguito da un delimitatore (spesso /), dallo schema da cercare, da un altro delimitatore, dal testo sostitutivo e da un delimitatore finale.
Sintassi: sed 's/pattern/replacement/' filename
Provi a sostituire «apple» con «orange» in un file di esempio:
#!/bin/bash
# Create a sample file
echo "I like red apple." > fruits.txt
echo "My favorite fruit is apple." >> fruits.txt
echo "Another apple here." >> fruits.txt
echo "Original content:"
cat fruits.txt
echo ""
echo "---"
echo "Running sed command:"
sed 's/apple/orange/' fruits.txt
# Clean up
rm fruits.txtGlobale e senza distinzione tra maiuscole e minuscole
Per impostazione predefinita, sed sostituisce solo la prima occorrenza di un modello in ogni riga. Per sostituire tutte le occorrenze in una riga, utilizzi il flag g (globale).
Per eseguire una ricerca senza distinzione tra maiuscole e minuscole, utilizzi il flag i. È possibile combinare i flag, ad esempio gi.
Esempio: sostituire tutte le occorrenze di "apple" (senza distinzione tra maiuscole e minuscole) con "banana".
#!/bin/bash
# Create a sample file
echo "Apple is good." > fruits.txt
echo "I eat an apple and another Apple." >> fruits.txt
echo "Apples are tasty." >> fruits.txt
echo "Original content:"
cat fruits.txt
echo ""
echo "---"
echo "Running sed command (s/apple/banana/gi):"
sed 's/apple/banana/gi' fruits.txt
# Clean up
rm fruits.txtEliminare righe con sed
Può utilizzare sed anche per eliminare intere righe che corrispondono a un modello specifico. A questo scopo si utilizza il comando d.
Sintassi: sed '/pattern/d' filename
È utile per rimuovere le righe indesiderate, ad esempio le voci di log che contengono "DEBUG" o le righe vuote.
Rimuoviamo le righe che contengono "error":
#!/bin/bash
# Create a sample file
echo "INFO: User logged in." > log.txt
echo "WARNING: Disk space low." >> log.txt
echo "ERROR: File not found." >> log.txt
echo "INFO: Operation complete." >> log.txt
echo "ERROR: Permission denied." >> log.txt
echo "Original content:"
cat log.txt
echo ""
echo "---"
echo "Running sed command (/error/d):"
sed '/error/d' log.txt
# Clean up
rm log.txtawk: linguaggio per la scansione dei modelli
awk è un altro potente strumento per l'elaborazione del testo, spesso utilizzato per l'estrazione dei dati e la generazione di report. Mentre sed è un editor di flussi, awk assomiglia più a un linguaggio di programmazione progettato per il testo.
awk elabora i file di testo riga per riga, proprio come sed. Tuttavia, considera ogni riga come un "record" e suddivide i record in "campi" (colonne) in base a un separatore.
Per impostazione predefinita, awk utilizza gli spazi bianchi (spazi e tabulazioni) come separatore dei campi.
Accedere ai campi dei dati
In awk, i campi sono indicati con $1, $2, $3 e così via. $0 rappresenta l'intera riga.
Può stampare campi specifici utilizzando il comando print all'interno di parentesi graffe {}. La sintassi è: awk '{ print $FIELD_NUMBER }' filename
Stampiamo il primo e il terzo campo da un semplice file di dati:
#!/bin/bash
# Create a sample file
echo "Name Age City" > data.txt
echo "Alice 30 NewYork" >> data.txt
echo "Bob 24 London" >> data.txt
echo "Charlie 35 Paris" >> data.txt
echo "Original content:"
cat data.txt
echo ""
echo "---"
echo "Running awk command (print $1, $3):"
awk '{print $1, $3}' data.txt
# Clean up
rm data.txtFiltrare le righe con awk
Proprio come sed, anche awk può filtrare le righe in base a determinati modelli. Si specifica un modello prima del blocco di azioni. L'azione viene eseguita solo sulle righe che corrispondono al modello.
Sintassi: awk '/pattern/ { action }' filename
Troviamo e stampiamo solo i nomi delle persone di "London":
#!/bin/bash
# Create a sample file
echo "Name Age City" > data.txt
echo "Alice 30 NewYork" >> data.txt
echo "Bob 24 London" >> data.txt
echo "Charlie 35 Paris" >> data.txt
echo "David 28 London" >> data.txt
echo "Original content:"
cat data.txt
echo ""
echo "---"
echo "Running awk command (/London/ {print $1}):"
awk '/London/ {print $1}' data.txt
# Clean up
rm data.txtInizializzare e finalizzare con awk
awk consente di specificare le azioni da eseguire prima di elaborare qualsiasi riga (blocco BEGIN) e dopo aver elaborato tutte le righe (blocco END).
I blocchi BEGIN sono ideali per stampare intestazioni o inizializzare variabili. I blocchi END sono perfetti per stampare riepiloghi, totali o piè di pagina.
Aggiungiamo un'intestazione e un piè di pagina al nostro output:
#!/bin/bash
# Create a sample file
echo "Alice 30 NewYork" > data.txt
echo "Bob 24 London" >> data.txt
echo "Charlie 35 Paris" >> data.txt
echo "Original content:"
cat data.txt
echo ""
echo "---"
echo "Running awk command (BEGIN/END):"
awk 'BEGIN { print "--- User Data ---" } { print $1, $2 } END { print "--- End Report ---" }' data.txt
# Clean up
rm data.txtLogica condizionale in awk
Può utilizzare istruzioni if nei blocchi di azioni di awk per applicare una logica in base ai valori dei campi o ad altre condizioni. Questo rende awk molto potente per il filtraggio e la trasformazione complessi dei dati.
Sintassi: awk '{ if (condition) { action } }' filename
Stampiamo solo gli utenti con più di 25 anni:
#!/bin/bash
# Create a sample file
echo "Alice 30 NewYork" > data.txt
echo "Bob 24 London" >> data.txt
echo "Charlie 35 Paris" >> data.txt
echo "Diana 27 Berlin" >> data.txt
echo "Original content:"
cat data.txt
echo ""
echo "---"
echo "Running awk command (if $2 > 25):"
awk '{ if ($2 > 25) { print $1, $2 } }' data.txt
# Clean up
rm data.txtVerifica rapida: sed e awk
Consideri il seguente contenuto in un file denominato names.txt:
John Doe,30,New York
Jane Smith,25,London
Peter Jones,40,Paris
Quale dei seguenti comandi produrrebbe in output solo i nomi (primo campo) delle persone con più di 30 anni?
Riepilogo: la potenza di sed e awk
Ora ha esplorato la potenza di sed per la modifica dei flussi e di awk per l'elaborazione avanzata del testo.
sedè perfetto per semplici sostituzioni, eliminazioni e trasformazioni riga per riga.awkeccelle nell'analisi del testo strutturato, nella gestione dei campi e nell'applicazione della logica condizionale per l'estrazione dei dati e la generazione di report.
Questi strumenti sono indispensabili per lo scripting, l'analisi dei log e la manipolazione dei dati nell'ambiente Linux.
Domande Frequenti
La lezione «Manipolazione avanzata del testo (sed, awk)» è gratuita?
Sì — il testo completo di «Manipolazione avanzata del testo (sed, awk)» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Linux Command Line & Bash Scripting Mastery, passa a CoddyKit PRO. Il corso Linux Command Line & Bash Scripting Mastery include 4 lezioni in totale.
Cosa imparerò in «Manipolazione avanzata del testo (sed, awk)»?
Esplori «sed» per l’editing dei flussi e «awk» per l’elaborazione avanzata del testo, la ricerca di pattern e l’estrazione dei dati. Eserciti Linux Command Line & Bash Scripting Mastery con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Linux Command Line & Bash Scripting Mastery?
Non è richiesta alcuna esperienza precedente. Linux Command Line & Bash Scripting Mastery su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «Manipolazione avanzata del testo (sed, awk)»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Linux Command Line & Bash Scripting Mastery?
Sì. Ogni lezione Linux Command Line & Bash Scripting Mastery include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Manipolazione avanzata del testo (sed, awk)
- Archiviazione e compressione (tar, gzip, unzip)
- Utilizzo del disco e informazioni di sistema (df, du, uname)
- Ordinamento e deduplicazione dei dati (sort, uniq, cut)