Unix / Linux - Espressioni Regolari con SED

Ciao a tutti, futuri maghi della riga di comando! Oggi ci immergeremo nel mondo magico delle espressioni regolari (regex) e del potente comando SED in Unix/Linux. Prendete il vostro seggiolino, perché stiamo per intraprendere un'avventura emozionante che trasformerà il modo in cui manipulate il testo!

Unix / Linux - Regular Expressions

Chiamare sed

Iniziamo con le basi. SED, che significa "Stream Editor", è uno strumento di elaborazione del testo potente. Per usarlo, semplicemente digitiamo "sed" seguita dai nostri comandi. È come evocare un genio che manipola il testo!

sed 'comando' nomefile

Per esempio:

sed 's/hello/buongiorno/' saluti.txt

Questo comando sostituisce "hello" con "buongiorno" nel file saluti.txt. Semplice, vero?

La Sintassi Generale di sed

La sintassi generale per sed è come una formula magica:

sed OPZIONI... [SCRIPT] [FILE DI INPUT...]

Non preoccupatevi se sembra intimidatorio. Lo analizzeremo pezzo per pezzo, come risolvere un divertente puzzle!

Cancellare Tutte le Righe con sed

Vuoi far scomparire tutto il testo in un file? Sed può farlo! Ecco come:

sed 'd' nomefile

Questo cancella tutte le righe nel file. È come usare una gomma sulla vostra agenda digitale!

Gli Indirizzi di sed

Gli indirizzi in sed sono come coordinate GPS per il vostro testo. Dicono a sed dove eseguire la sua magia. Ecco alcuni esempi:

sed '2d' file.txt  # Cancellare la 2ª riga
sed '/modello/d' file.txt  # Cancellare le righe contenenti 'modello'

Gli Intervalli di Indirizzi di sed

A volte, vogliamo lanciare la nostra magia su un intervallo di righe. Ecco come:

sed '2,5d' file.txt  # Cancellare le righe dal 2 al 5
sed '2,$d' file.txt  # Cancellare dalle righe 2 alla fine del file

Il Comando di Sostituzione

Il comando di sostituzione è il pane e il burro di sed. È come "cerca e sostituisci" su steroidi!

sed 's/vecchio/nuovo/' file.txt

Questo sostituisce la prima occorrenza di "vecchio" con "nuovo" su ogni riga.

Flag per la Sostituzione

Le flag sono come potenziamenti per i vostri comandi di sostituzione. Ecco una tabella delle flag comuni:

Flag Descrizione
g Sostituisci tutte le occorrenze, non solo la prima
i Ignora maiuscole/minuscole
p Stampa la riga modificata
w Scrivi il risultato in un file

Esempio:

sed 's/gatto/cane/g' animali.txt

Questo sostituisce tutte le occorrenze di "gatto" con "cane".

Utilizzare un Separatore di Stringa Alternativo

A volte, il vostro testo contiene molti slash. Nessun problema! Possiamo usare separatori diversi:

sed 's#/usr/local/bin#/common/bin#' percorsi.txt

Qui, stiamo usando '#' come nostro separatore invece di '/'.

Sostituire con Spazio vuoto

Vuoi far scomparire il testo senza lasciare traccia? Ecco come:

sed 's/indesiderato//g' file.txt

Questo rimuove tutte le occorrenze di "indesiderato" dal file.

Sostituzione con Indirizzi

Possiamo combinare gli indirizzi con la sostituzione per una precisione millimetrica:

sed '3,6s/foo/bar/g' file.txt

Questo sostituisce tutte le "foo" con "bar", ma solo sulle righe dal 3 al 6.

Il Comando di Corrispondenza

Il comando di corrispondenza è come una luce da scena, che illumina le righe che ci interessano:

sed -n '/modello/p' file.txt

Questo stampa solo le righe contenenti "modello".

Utilizzare Espressioni Regolari

Ora entriamo nella vera magia! Le espressioni regolari sono come wildcards su steroidi. Ecco un esempio semplice:

sed -n '/^The/p' storia.txt

Questo stampa tutte le righe che iniziano con "The".

Corrispondenza di Caratteri

Le espressioni regolari hanno caratteri speciali che agiscono come mutanti:

Carattere Significato
. Qualsiasi singolo carattere
* Zero o più della precedente carattere
^ Inizio della riga
$ Fine della riga

Esempio:

sed -n '/c.t/p' animali.txt

Questo corrisponde a "cat", "cot", "cut", ecc.

Parole Chiave delle Classi di Caratteri

Le classi di caratteri sono come squadre di caratteri. Ecco alcuni MVP:

Clase Corrisponde
[:alpha:] Caratteri alfabetici
[:digit:] Caratteri numerici
[:alnum:] Caratteri alfanumerici

Esempio:

sed -n '/[[:digit:]]/p' dati.txt

Questo stampa le righe contenenti qualsiasi numero.

Riferimento all'Ampersand

L'ampersand (&) è come uno specchio magico, riflettendo ciò che è stato匹配:

sed 's/[0-9]/(&)/' numeri.txt

Questo mette parentesi intorno a ogni numero.

Utilizzare Più Comandi sed

Vuoi lanciare più incantesimi contemporaneamente? Usa l'opzione -e:

sed -e 's/foo/bar/g' -e 's/baz/qux/g' file.txt

Questo esegue due sostituzioni in una sola volta!

Riferimenti Indietro

I riferimenti indietro sono come macchine del tempo, che ci permettono di riutilizzare parti della corrispondenza:

sed 's/\(.*\):\(\)/\2:\1/' nomi.txt

Questo scambia il testo prima e dopo una virgola.

Eccoci, miei cari studenti! Abbiamo viaggiato attraverso la terra di sed ed espressioni regolari. Ricordate, la pratica rende perfetti. Quindi andate avanti e manipulate il testo come i maghi della riga di comando che state diventando! Buon codice!

Credits: Image by storyset