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!
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