Sei stato alla ricerca di un altro modo per eseguire operazioni di modifica su testi? Non cercare oltre! Questo tutorial ha tutto ciò di cui hai bisogno con esempi di stream editor sed.
In poche parole, sed ti permette di eseguire una vasta gamma di modifiche su file e flussi di testo in modo non interattivo. Prendi le decisioni di modifica mentre chiami i comandi. E in questo tutorial imparerai come utilizzare i comandi sed e ottimizzare il tuo flusso di lavoro.
Continua a leggere e potenzia le tue abilità della riga di comando!
Prerequisiti
Assicurati di avere quanto segue per seguire la dimostrazione pratica di questo tutorial:
- A command line interface (e.g., Terminal on macOS or Linux) – This tutorial uses Ubuntu Linux 20.04, but the commands should work on most popular operating systems.
- A text editor (e.g., nano, vi, or Sublime Text) – This tutorial uses Nano.
Installazione di sed su Ubuntu
sed è generalmente incluso come un’utilità standard nella maggior parte dei sistemi operativi di tipo Unix, inclusi Linux e macOS. Ma comunque, controllare se hai già sed sul tuo sistema sarebbe una buona idea ed è una procedura di base prima di eseguire trasformazioni di testo.
1. Apri il tuo terminale e esegui il seguente comando sed
per verificare quale versione di sed è installata sul tuo sistema.
Se sed è installato, vedrai il numero di versione di sed e alcune informazioni sulla build, come mostrato di seguito.

Altrimenti, vedrai il messaggio di errore qui sotto se sed non è installato.
Questo messaggio di errore indica che il comando sed
non è stato trovato nella variabile di ambiente PATH del tuo sistema.

2. Successivamente, esegui il comando [apt-get update
qui sotto per aggiornare e installare sed
sul tuo sistema.
Questo comando recupera le ultime informazioni sul pacchetto dalle fonti dei pacchetti configurate, inclusa le dipendenze, i file e gli script del pacchetto. Eseguire questo comando è necessario per assicurarsi di installare l’ultima versione di sed e qualsiasi altro pacchetto necessario.

3. Infine, eseguire il seguente comando per verificare che il comando sed
sia installato sul tuo sistema.
Questo comando stampa il percorso completo dell’eseguibile sed, che in questo esempio è /usr/bin/sed.
Una volta installato sed e verificato che sia nel tuo PATH, puoi utilizzare il comando sed
per eseguire varie trasformazioni e manipolazioni del testo.

Sostituzione di stringhe in un file di testo
sed è un popolare editor di flusso disponibile sulla maggior parte dei sistemi operativi simili a Unix, e una delle caratteristiche più utili di sed è la sostituzione di stringhe in un file di testo.
Ecco alcuni scenari, ma non solo, in cui la sostituzione di stringhe è utile:
- Aggiornare un elenco di URL per riflettere un nuovo nome di dominio.
- Cambiare gli ID dei prodotti in un database o file CSV.
- Formattare i dati per l’importazione in un altro sistema e molto altro ancora.
La sintassi di base per l’utilizzo di sed è la seguente, dove:
Placeholder | Function |
---|---|
command | Controls sed’s behavior. |
options | Allows you to customize the behavior of the sed command |
input_file | Specifies the file or text stream that you want to edit. Typically, you can specify a single file or stream, but concatenating multiple files or streams by redirection also works. |
output_file | Specifies the file that contains the results of your sed command. The file can be new or the same as input_file, depending on how you use sed. |
Supponiamo di avere un file di testo chiamato urls.txt
che contiene un elenco di URL e si desidera aggiornare tutti gli URL per utilizzare un nuovo nome di dominio.
1. Esegui i comandi echo
di seguito per creare il file urls.txt
nella directory corrente. Questi comandi non forniscono output, ma scrivono i testi specificati nel file.
2. Successivamente, esegui il comando cat
per visualizzare il contenuto del file urls.txt. cat urls.txt
L’output di seguito conferma i tre vecchi URL scritti nel file urls.txt.

3. Ora, esegui il comando di seguito per trovare e sostituire (s
) tutte le occorrenze della stringa old-domain.com
con new-domain.com
nel file urls.txt
.
Vedrai che gli URL nel tuo file di input sono stati aggiornati con il nuovo dominio, come mostrato.

Sostituzione dell’ennesima occorrenza di una stringa
Oltre alla funzionalità di base di ricerca e sostituzione, sed dispone di comandi integrati aggiuntivi che consentono di eseguire trasformazioni di testo più complesse. Un esempio di questo caso è sostituire l’ennesima occorrenza della stringa di pattern in una singola riga di testo.
Ad esempio, si desidera aggiornare il secondo campo in un file CSV con un nuovo valore o aggiornare la terza occorrenza di una stringa in un dump del database.
La sintassi di base per questo comando è la seguente:
pattern
– è la stringa da sostituire.replacement
– è la stringa da utilizzare come sostituzione.n
– is the nth occurrence of the string to replace (e.g.,1
=first occurrence,2
=second occurrence…).
Per vedere come sostituire l’n-esima occorrenza di una stringa, segui questi passaggi:
Esegui il seguente comando echo
per creare una riga di testo con tre occorrenze del pattern quick
. Il comando sed
sostituisce quindi (s
) la seconda occorrenza (2
) del pattern quick
con la stringa fast
.
Come puoi vedere qui sotto, solo la seconda occorrenza del pattern quick è stata sostituita con la stringa fast, mentre tutte le altre occorrenze rimangono invariate.
Il comando nth
è sensibile alle maiuscole e minuscole per impostazione predefinita. Di conseguenza, il comando cerca solo la corrispondenza esatta del pattern. Per ignorare la differenza tra maiuscole e minuscole del pattern, passa al passaggio seguente.

?
nth
conta le occorrenze del pattern da sinistra a destra. Inoltre, il comandonth
funziona solo su una singola riga di testo. Per eseguire una sostituzione su più righe, utilizza un metodo diverso illustrato nella sezione seguente.
Successivamente, esegui il comando seguente per sostituire la seconda (2
) occorrenza del pattern quick
con fast
ignorando (i
) le maiuscole e le minuscole.
L’opzione i
è utile quando si lavora con testi con capitalizzazione inconsistente.
Nell’output qui sotto, la seconda occorrenza della parola quick (QuiCk) viene sostituita con successo con la stringa fast, indipendentemente dalla lettera maiuscola o minuscola.

Sostituzione di tutte le occorrenze di un modello/stringa corrispondente
Invece di sostituire l’n-esima occorrenza di una stringa, forse hai intenzione di sostituire tutte le sue occorrenze. Farlo aiuta notevolmente nel tuo piano di aggiornare in massa ogni occorrenza di una stringa di Copyright con l’anno corrente, ad esempio.
1. Crea un file chiamato input.txt con il seguente contenuto nel tuo editor di testo preferito.
This is a quick test.
The quick brown fox jumps over the lazy dog.
Quick, you need to finish this task before it gets too late.
2. Successivamente, esegui il seguente comando per sostituire (s
) tutte le occorrenze della parola quick
con fast
dal file input.txt
. Una volta sostituite, le modifiche vengono scritte nel file output.txt
.
3. Ora, esegui il comando di seguito per visualizzare il contenuto del file output.txt
e verificare se è stata effettuata la sostituzione.
Vedrai che tutte le occorrenze della parola quick sono state sostituite con fast, come mostrato di seguito. Similmente al comando nth
, il comando g
è sensibile alle maiuscole e minuscole e sostituisce solo le corrispondenze esatte.
La stringa Quick non verrà sostituita, come mostrato di seguito, ma è possibile utilizzare l’opzione i
per eseguire sostituzioni senza distinzione tra maiuscole e minuscole.

Sostituzione di una stringa corrispondente su una linea specifica.
Forse già sai quale riga della stringa vuoi sostituire. Perché sostituire tutte le occorrenze quando puoi sostituire le stringhe solo nelle righe specifiche? Questa funzionalità è utile quando si apportano modifiche a una particolare riga in un file o flusso, lasciando le altre righe intatte.
Di seguito è riportata la sintassi per sostituire una stringa da una riga specifica, dove n
rappresenta il numero di riga.
1. Crea un file chiamato myfile.txt con il seguente contenuto.
test1
test2
test3
2. Successivamente, esegui il comando sed
di seguito per eseguire le seguenti operazioni:
- Cerca la parola
test2
dalla seconda riga (2
) del filemyfile.txt
.Sostituisci (s
) la parolatest2
contest2_changed
.Scrivi le modifiche (>
) su un nuovo file chiamatomyfile_changed.txt
.
This command does not provide output to the terminal since the changes are written to a new file. But you will verify the changes in the following step.
3. Infine, esegui il comando cat di seguito per visualizzare il contenuto del file myfile_changed.txt
.
Come puoi vedere di seguito, la seconda riga del file myfile.txt è stata sostituita con test2_changed, mentre tutte le altre righe rimangono invariate.

Estrazione Esclusiva delle Righe Modificate di Stringhe
Invece di stampare l’intero contenuto di un file dopo aver apportato modifiche, potresti voler stampare solo le righe modificate. Come? Utilizzando l’opzione p
insieme all’opzione -n
.
Di seguito è riportata la sintassi per stampare esclusivamente le righe modificate di stringhe, dove:
- L’opzione
-n
dice ased
di sopprimere il comportamento predefinito di stampare ogni riga. - Il flag
p
dice ased
di stampare l’output del comando.
Apri il file myfile.txt e sostituisci il contenuto con quanto segue. Nota che la seconda riga è errata, poiché la parola first
dovrebbe essere second
.
This is the first line of my file.
This is the first line of my file.
This is the third line of my file.
Ora, esegui il seguente comando sed
per sostituire la stringa first
con second
nella seconda riga (2
) del file myfile.txt
, ma stampa solo le righe modificate (p
).
Vedrai l’output della seconda riga modificata solo sul tuo terminale, come mostrato di seguito.

Conclusioni
In questo tutorial, hai utilizzato diversi esempi di utilizzo di sed per eseguire operazioni di ricerca e sostituzione. Inoltre, hai toccato temi più avanzati, come la sostituzione di occorrenze specifiche e la stampa solo delle righe modificate.
sed è un potente strumento da linea di comando che consente di eseguire varie operazioni di manipolazione del testo. Che tu stia effettuando sostituzioni globali su un intero file o sostituzioni mirate su righe specifiche, sed farà al caso tuo.
Ora, perché non esplorare di più le espressioni regolari? Le espressioni regolari sono essenziali per molti strumenti di manipolazione del testo, incluso sed. Queste espressioni ti permettono di risparmiare tempo e sforzi quando esegui ricerche complesse e operazioni di sostituzione su grandi quantità di testo.