Come usare Sed per trovare e sostituire una stringa nei file

Sed (abbreviazione di Stream Editor ) è un’utilità della riga di comando nei sistemi operativi GNU/Linux utilizzata per modificare i file di testo. Può essere considerato come un editor di testo da riga di comando; tuttavia, è diverso dagli editor di testo “in tempo reale” come Vim e Nano , nel senso che gli ultimi due sono editor interattivi mentre sed si basa esclusivamente sull’invocazione del comando con gli argomenti richiesti.

Oggi impareremo come usare il comando sed per trovare e sostituire una stringa in un file di testo in Linux.

Trova e sostituisci stringa nei file

Un comando sed è disponibile per impostazione predefinita nelle distribuzioni GNU/Linux e utilizzeremo il seguente file di testo di esempio per testare sed , ma prima di ciò, visualizzare il contenuto del file utilizzando il comando cat come mostrato.

$ cat test.txt
Visualizza il contenuto del file
Visualizza il contenuto del file

Usiamo sed per cercare la stringa ” Ubntu ” in questo file e sostituirla con ” Ubuntu “. Di seguito è riportata la sintassi di base di sed per cercare e sostituire una stringa in un file.

$ sed 's/string_tobe_replaced/new_string/g' nomefile

Proviamo a capire la sintassi del primo argomento qui. L’opzione 's'all’inizio specifica di sed il comando interno per la ricerca e la sostituzione delle stringhe. Sed  è uno strumento complesso e ha molti di questi comandi interni per manipolare un file in vari modi.

Quindi abbiamo l’originale e la nuova stringa separate da barre rovesciate. Infine, abbiamo un 'g'che specifica che la stringa deve essere sostituita ‘ Globalmente ‘, cioè, in tutto il file.

Se 'g'non è specificato, sostituirà solo la prima occorrenza della stringa in ogni riga del file.

$ sed 's/Ubntu/Ubuntu/g' test.txt
Trova e sostituisci stringa nel file
Trova e sostituisci stringa nel file

Come puoi vedere sopra, sed ha sostituito con successo “Ubntu” con “Ubuntu” e ha scritto il contenuto del file con la stringa sostituita sullo standard output.

Questo è il comportamento predefinito di sed : per scrivere i nuovi contenuti del file sullo standard output. Per scrivere il contenuto nel file stesso, usa l’ '-i'argomento.

$ sed -i 's/Ubntu/Ubuntu/g' test.txt

Tuttavia, non è consigliabile scrivere sul file originale stesso senza eseguirne il backup; soprattutto se si tratta di un file di grandi dimensioni perché se si è verificato un errore nella nuova stringa, l’utente deve nuovamente dedicare del tempo a risolverlo.

Chiama invece l’argomento '-i'con un’estensione, ad esempio ‘-i.bkp’ . Ciò che farà è: creerà un file di backup dell’originale ‘ test.txt ‘ chiamato ‘ test.txt.bkp ‘, in modo che se l’originale presenta errori dopo la sostituzione della stringa, la versione precedente può essere ripristinata dal backup .

$ sed -i.bkp 's/Ubntu/Ubuntu/g' test.txt
Cerca e sostituisci stringa nel file
Cerca e sostituisci stringa nel file

Come puoi vedere chiaramente, il file di backup ha contenuti originali, mentre le occorrenze di stringhe nel file originale sono state sostituite. Quindi, se si presenta la necessità di ripristinare il file originale, l’utente può semplicemente eseguire:

$ mv test.txt.bkp test.txt
Conclusione

In questo articolo abbiamo visto un semplice caso d’uso di sed: trovare e sostituire una stringa in un file. Questa funzione è utile soprattutto se utilizzata in uno script; le stringhe originali e nuove possono essere quindi specificate con variabili di shell. Con gli editor interattivi, di solito non c’è modo di automatizzare la ricerca e la funzionalità di sostituzione.

Grazie mille per aver letto e facci sapere i tuoi pensieri qui sotto!

Translate »