0Pricing
Linux Command Line & Bash Scripting Mastery · 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 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.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 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

  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 Linux Command Line & Bash Scripting Mastery