Come sostituire una stringa in un file di testo usando sed


Linux tips – Photo by JPPI, 2015, MorgueFile.com

Supponi di voler sostituire una stringa di testo in un file di testo. Stai scrivendo un romanzo in un file TXT e all’improvviso decidi di cambiare il nome della protagonista. Sì, loro nel 2018 nessuno scriver un romanzo in un file TXT. Gli scrittori usano LibreOffice Writer.

Comunque, è solo un esempio.

Supponi di avere il file “myfile.txt” e di voler sostituire tutte le occorrenze di “Rose” con “Margaret”.

Devi eseguire nell’interprete bash il comando:

sed -i 's/Rose/Margaret/g' /path/to/myfile.txt

Questo è tutto.

Ma se volessi mantenere copia del file prima della modifica? Usa quest’altro comando:

sed 's/Rose/Margaret/g' /path/to/myfile.txt > /path/to/mynewfile.txt

Ok, ma le cose si complicano. Decidi di cambiare tutti i nomi nella storia. Vuoi fare le seguenti sostituzioni:

  1. Rose -> Margaret
  2. Steve -> Ben
  3. Mark -> Oliver

Come puoi fare? Usa questo comando sed (scrivilo sulla stessa riga):

sed -i 's/Rose/Margaret/g; s/Steve/Ben/g; s/Mark/Oliver/g' /path/to/myfile.txt

Ok. Supponi che nel romanzo ci sono molti personaggi.

Vuoi sostituire molti schemi.

Crea un file per eseguire un interprete sed. Apri un editor di testo (nano, vi, vim, …) a scrivi in esso:

#!/usr/bin/sed -f
s/Rose/Margaret/g
s/Ann/Lola/g
s/Carl/John/g
s/Steve/Ben/g
s/Mark/Oliver/g

Salva il file con il nome “mysedscript” e quindi eseguilo così:

chmod +x mysedscript
./mysedscript /path/to/myfile.txt > /path/to/mynewfile.txt

È tutto! In /path/to/mynewfile.txt avrai le modifiche richieste.

Se desiderassi un file di esempio da dare in pasto allo script sed dai questi comandi:

echo "Rose said she's happy" > /path/to/myfile.txt
echo "Ann got sick" >> /path/to/myfile.txt
echo "Carl wanted to go to the cinema" >> /path/to/myfile.txt
echo "Steve's bored" >> /path/to/myfile.txt
echo "Mark is alone" >> /path/to/myfile.txt

Dopo aver lanciato lo script otterrai il nuovo file (in /path/to/mynewfile.txt):

Margaret said she's happy
Lola got sick
John wanted to go to the cinema
Ben's bored
Oliver is alone

Comunque, per sostituire caratteri speciali quale potrebbe essere “/”, devi sostituirlo con “\/” perché “/” fa parte del “comando” sed.

Esempio:

sed 's/\///g' /path/to/myfile.txt > /path/to/mynewfile.txt

Con questo comando rimuoverai tutti i caratteri “/” dall’interno del file /path/to/myfile.txt, certo, otterrai il risultato nel nuovo file /path/to/myfile.txt. Prova a usare l’opzione “-i” come detto all’inizio dell’articolo se non ti serve conservare una copia del file originale.

Altre domande?

Annunci
Questa voce è stata pubblicata in Linux e contrassegnata con . Contrassegna il permalink.

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...

This site uses Akismet to reduce spam. Learn how your comment data is processed.