0Pricing
DevOps Bootcamp · Lezione

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 DevOps Bootcamp 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 DevOps Bootcamp, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso DevOps Bootcamp 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.txt

Globale 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.txt

Eliminare 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.txt

awk: 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.txt

Filtrare 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.txt

Inizializzare 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.txt

Logica 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.txt

Verifica 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.
  • awk eccelle 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 DevOps Bootcamp, passa a CoddyKit PRO. Il corso DevOps Bootcamp 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 DevOps Bootcamp 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 DevOps Bootcamp?

Non è richiesta alcuna esperienza precedente. DevOps Bootcamp 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 DevOps Bootcamp?

Sì. Ogni lezione DevOps Bootcamp 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

  1. Manipolazione avanzata del testo (sed, awk)
  2. Archiviazione e compressione (tar, gzip, unzip)
  3. Utilizzo del disco e informazioni di sistema (df, du, uname)
  4. Ordinamento e deduplicazione dei dati (sort, uniq, cut)
← Torna a DevOps Bootcamp