GUIDA A SED, 02 – sostituzioni

SOSTITUZIONE DI CONTENUTI DEL FILE

$ cat test2
roma
parigi
londra
berlino
$ sed 's/^/capitali: /' test2
capitali: roma
capitali: parigi
capitali: londra
capitali: berlino

Aggiunge la stringa “capitali: ” all’inizio (^) di ogni riga “s” sta per “substitution” ovvero: sostituisci l’inizio di ogni riga con la stringa data.

Similmente per aggiungere qualcosa alla fine delle stringhe:

$ sed 's/$/ è una bella città/' test2
roma è una bella città
parigi è una bella città
londra è una bella città
berlino è una bella città

Il carattere “$” sta per la fine di ogni record

NB nel caso in cui il file sia formattato in DOS, il carattere “$” corrispondera’ al primo carattere della riga successiva. Per convertire da DOS a Linux:

http://stackoverflow.com/questions/2613800/how-to-convert-dos-windows-newline-crlf-to-unix-newline-n-in-bash-script

In pratica e’ sufficiente utilizzare questi tre comandi sed:

sed ‘s/.$//’ |sed ‘s/^M$//’| sed ‘s/\x0D$//’

Per sostituire una particolare stringa:

$ sed 's/parigi/la capitale della francia/' test2
roma
la capitale della francia
londra
berlino

O un particolare carattere:

$ sed 's/r/R/' test2
Roma
paRigi
londRa
beRlino

Da notare che in ogni ricorrenza solo il primo carattere viene sostituito. se si desidera variare tutte le ricorrenze aggiungiamo il flag “g” (“global”) alla fine:

$ sed ‘s/r/R/g’ test2

per sostituire solo la seconda ricorrenza:

$ sed 's/r/R/2' test2

Per sostituire tutte le ricorrenze dalla seconda:

$ sed 's/r/R/2g' test2

Per sostituire un carattere solo in una particolare riga (nell’esempio la seconda):

$ sed '2s/r/R/' test2
roma
paRigi
londra
berlino

Per sostituire un carattere in un range di linee:

$ sed '2,4s/r/R/' test2

Per sostituire l’intera riga con una stringa:

$ sed 's/.*/ è una capitale/' test2
è una capitale
è una capitale
è una capitale
è una capitale

“.*” -> matcha con l’intera stringa

Se voglio che la stringa segua il testo preesistente utilizzo “&” che matcha l’intera stringa esistente:

$ sed 's/.*/& è una capitale/' test2
roma è una capitale
parigi è una capitale
londra è una capitale
berlino è una capitale

Concatenazioni di sostituzioni:

$ sed 's/a/A/g; s/r/R/g; s/o/O/g' test2
ROmA
pARigi
lOndRA
beRlinO

Oppure usiamo l’opzion “-e”:

$ sed -e 's/a/A/g' -e 's/r/R/g' -e 's/o/O/g' test2
ROmA
pARigi
lOndRA
beRlinO

L’opzione “-e” viene usata se si hanno più set di sostituzioni nello teso comando.

—————————————————

INDICE

Lascia una risposta

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati *

È possibile utilizzare questi tag ed attributi XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>