Il comando sed (Stream Editor) in Linux è un potente strumento utilizzato per l’elaborazione del testo e la modifica dei file. Consente agli utenti di cercare, sostituire, inserire e cancellare testo nei file in modo efficiente, rendendolo un comando fondamentale per l’automazione e lo scripting. In questa guida, esamineremo come utilizzare il comando sed per aggiornare i file in Linux con esempi pratici.

Perché usare il comando Sed?

Il comando sed è ampiamente utilizzato per:

Sostituzione del testo – Sostituire facilmente parole, frasi o modelli nei file.
Elaborazione in batch – Modifica di più file contemporaneamente tramite script.
Efficienza: elabora rapidamente file di grandi dimensioni senza aprirli.
Modifica in linea – Modifica i file direttamente dalla riga di comando.
Automazione – Utilizzata negli script per gestire modifiche ripetitive del testo.

Sintassi di base del comando Sed

La sintassi generale del comando sed è:

sed [OPTIONS] 's/old-text/new-text/g' filename

Dove:

  • s – Sta per sostituzione.
  • old-text – Il testo da sostituire.
  • nuovo-testo – Il testo da sostituire.
  • g – (Globale) Assicura la sostituzione di tutte le occorrenze nella riga.
  • filename – Il file da modificare.

Come usare il comando Sed per aggiornare i file

1. Sostituire una parola in un file

Per sostituire una parola specifica in un file, utilizzare:

sed 's/Linux/Ubuntu/g' file.txt

Questo sostituisce la prima occorrenza di “Linux” con “Ubuntu” in ogni riga di file.txt.

2. Sostituire tutte le occorrenze in un file

Per sostituire tutte le occorrenze di una parola a livello globale in un file:

sed 's/Linux/Ubuntu/g' file.txt

Il flag g assicura che ogni occorrenza in una riga venga sostituita.

3. Modifica di un file in posizione (modifica diretta del file)

Per apportare modifiche direttamente nel file senza visualizzare l’output:

sed -i 's/Linux/Ubuntu/g' file.txt

L’opzione -i abilita la modifica in-place, cioè il file originale viene modificato senza dover salvare una versione separata.

4. Sostituire il testo solo in righe specifiche

Per modificare solo righe specifiche di un file, specificare il numero di riga:

sed '3s/Linux/Ubuntu/' file.txt

Questo comando sostituisce “Linux” con “Ubuntu” solo alla riga 3.

5. Cancellare una riga contenente un testo specifico

Per eliminare tutte le righe contenenti una parola specifica, utilizzate:

sed '/unwanted-text/d' file.txt

Questo rimuove tutte le righe che contengono “testo indesiderato”.

6. Eliminare una riga specifica per numero

Per rimuovere una riga specifica, utilizzare:

sed '5d' file.txt

In questo modo si elimina la riga 5 di file.txt.

7. Inserire testo prima di una riga

Per aggiungere una riga prima di un numero di riga specifico:

sed '3i\This is a new line' file.txt

In questo modo si inserisce la scritta “Questa è una nuova riga” prima della riga 3.

8. Inserire testo dopo una riga

Per inserire una riga dopo un numero di riga specifico:

sed '3a\This is an appended line' file.txt

In questo modo si aggiunge “Questa è una riga aggiunta” dopo la riga 3.

9. Sostituire una parola in più file

Per sostituire il testo in più file contemporaneamente:

sed -i 's/Linux/Ubuntu/g' *.txt

Questo comando modifica tutti i file .txt della directory, sostituendo “Linux” con “Ubuntu”.

Comandi Sed avanzati

1. Utilizzare più comandi Sed insieme

Per eseguire più modifiche contemporaneamente:

sed -i -e 's/Linux/Ubuntu/g' -e 's/Server/Cloud/g' file.txt

Questo sostituisce “Linux” con “Ubuntu” e “Server” con “Cloud” nel file.txt.

2. Utilizzare Sed con le espressioni regolari

Per sostituire i numeri in un file:

sed 's/[0-9]/#/g' file.txt

Questo sostituisce tutte le cifre con #.

3. Estrarre righe specifiche da un file

Per estrarre e visualizzare le righe da 5 a 10:

sed -n '5,10p' file.txt

L’opzione -n impedisce di stampare l’intero file, mostrando solo le righe 5-10.

Buone pratiche per l’uso di Sed

  1. Eseguiresempre un backup dei file prima di utilizzare l’opzione -i – Per evitare la perdita accidentale di dati.
  2. Usare le espressioni regolari – Potenti pattern matching per modifiche complesse.
  3. Testate i comandi prima di applicare le modifiche – Eseguite sed senza -i per avere un’anteprima dell’output.
  4. Utilizzare gli script per l’automazione – Combinare sed con gli script di shell per l’elaborazione in batch.

Conclusione

Il comando sed è uno strumento versatile ed efficiente per aggiornare i file in Linux. Sia che si debba sostituire del testo, cancellare delle righe o inserire del contenuto, sed può automatizzare e semplificare queste operazioni. La padronanza di sed consente di migliorare il flusso di lavoro e la produttività nell’amministrazione e nello scripting di Linux.