0Pricing
Linux Command Line & Bash Scripting Mastery · Lezione

Combinare le espressioni regolari con sed/awk

Integri le espressioni regolari nei comandi «sed» e «awk» per filtrare, sostituire ed estrarre dati dal testo in modo avanzato.

Combinare le espressioni regolari con sed/awk è una lezione Linux Command Line & Bash Scripting Mastery gratuita su CoddyKit. Questa è la lezione 3 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.

Regex con sed e awk

Benvenuto nell'ultima lezione sulle espressioni regolari! Abbiamo imparato la potenza delle regex per la ricerca di schemi.

Ora uniremo questa potenza a due strumenti Linux essenziali: sed (editor di flussi) e awk (linguaggio per la scansione e l'elaborazione di schemi). Questa integrazione consente di eseguire filtraggio, sostituzione ed estrazione di dati dal testo a un livello molto avanzato.

sed: filtrare con le regex

sed può usare le espressioni regolari per filtrare le righe. L'indirizzo /pattern/ consente a sed di applicare i comandi solo alle righe che corrispondono alla regex indicata.

L'opzione -n sopprime l'output predefinito, mentre p stampa esplicitamente le righe corrispondenti.

echo -e "apple
banana
orange" | sed -n '/an/p'

sed: sostituire con le regex

Il comando s/regex/replacement/ di sed è il punto in cui le regex danno il meglio per la trasformazione del testo. È possibile sostituire con un nuovo testo gli schemi individuati dalla regex.

Il flag g sostituisce tutte le occorrenze in una riga, mentre i rende la corrispondenza insensibile alle maiuscole e minuscole.

echo "Hello world, hello universe" | sed 's/hello/hi/gi'

sed: gruppi di cattura e riferimenti all'indietro

Le espressioni regolari consentono di definire gruppi di cattura usando le parentesi (). È quindi possibile fare riferimento al testo corrispondente a questi gruppi nella stringa di sostituzione usando riferimenti all'indietro come \1, \2 ecc.

Usi -E con sed per la sintassi delle regex estese, ad esempio per usare () senza caratteri di escape.

echo "Doe, John" | sed -E 's/([A-Za-z]+), ([A-Za-z]+)/\2 \1/'

awk: filtrare i record con le regex

awk usa gli schemi regex per selezionare i record (righe) prima di eseguire le azioni. Se uno schema viene fornito prima di un blocco di azioni {...}, l'azione viene eseguita solo per le righe che corrispondono allo schema.

È simile a grep, ma consente un'elaborazione più complessa.

echo -e "Line 1: apple
Line 2: banana
Line 3: orange" | awk '/banana/'

awk: regex su campi specifici

In awk è possibile applicare schemi regex a campi specifici usando gli operatori ~ (corrisponde) e !~ (non corrisponde). È molto potente per i dati strutturati.

Ad esempio, $1 ~ /pattern/ verifica se il primo campo corrisponde alla regex.

echo "Name: John, Age: 30
Name: Jane, Age: 25" | awk '$1 ~ /Name/ {print $2}'

awk: estrarre le corrispondenze (match, substr)

awk offre funzioni come match(string, regex) per trovare la posizione e la lunghezza di una corrispondenza e substr(string, start, length) per estrarla.

Dopo match(), RSTART contiene la posizione iniziale e RLENGTH contiene la lunghezza della corrispondenza.

echo "ItemCode: ABC123 Price: 45.67" | awk '{match($0, /[0-9]+\.[0-9]+/); print substr($0, RSTART, RLENGTH)}'

awk: sostituzione sul posto (sub, gsub)

awk dispone anche di funzioni integrate per la sostituzione: sub(regex, replacement, target) per la prima corrispondenza e gsub(regex, replacement, target) per tutte le corrispondenze.

Se target viene omesso, viene usato $0 (l'intero record). È possibile specificare un campo come $1.

echo "apple,banana,orange" | awk '{gsub(/a/, "X", $0); print}'

Scegliere tra sed e awk

Sebbene sia sed sia awk possano usare le regex per la sostituzione e il filtraggio, eccellono in aree diverse:

  • sed è generalmente più adatto a semplici trasformazioni e sostituzioni riga per riga. È un editor di flussi.
  • awk è più potente per elaborare dati strutturati (campi), eseguire calcoli e gestire logiche più complesse o schemi su più righe. È un vero e proprio linguaggio di programmazione.

Spesso è possibile concatenarli con pipe | per attività molto complesse.

Sfida: estrarre e trasformare

Consideri la seguente riga di testo:

Order#12345: ProductX - Price $19.99

Quale comando estrarrebbe correttamente il prezzo (ad esempio '19.99') e quindi cambierebbe il simbolo della valuta in 'EUR'?

Riepilogo: regex con sed e awk

Ha acquisito padronanza della combinazione delle espressioni regolari con sed e awk!

  • sed eccelle nel filtrare e sostituire il testo riga per riga, usando le regex per una potente ricerca e sostituzione di schemi.
  • awk offre un approccio più programmatico: consente di usare le regex per filtrare i record, cercare corrispondenze in campi specifici ed estrarre o modificare dati con funzioni come match(), substr(), sub() e gsub().

Questa competenza è fondamentale per l'elaborazione avanzata del testo e lo scripting in Linux.

Domande Frequenti

La lezione «Combinare le espressioni regolari con sed/awk» è gratuita?

Sì — il testo completo di «Combinare le espressioni regolari con 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 «Combinare le espressioni regolari con sed/awk»?

Integri le espressioni regolari nei comandi «sed» e «awk» per filtrare, sostituire ed estrarre dati dal testo in modo avanzato. 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 3 di 4.

Quanto tempo richiede la lezione «Combinare le espressioni regolari con 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. Introduzione alle espressioni regolari (Regex)
  2. Grep avanzato con le espressioni regolari
  3. Combinare le espressioni regolari con sed/awk
  4. Gruppi di cattura, backreference e sostituzione
← Torna a Linux Command Line & Bash Scripting Mastery