GUIDA A SED, 05 – sostituzioni (II parte)

SOSTITUZIONE DI CONTENUTI DEL FILE – II parte

# Partiamo dal file:
$ sed '' file1
europa,italia,roma
asia,cina,pechino
usa,washington,washington
australia,australia,melbourne
africa,ghana,accra

Sostituiamo i primi due caratteri con “XXX”:

$ sed 's/^../XX/' file1
XXropa,italia,roma
XXia,cina,pechino
XXa,washington,washington
XXstralia,australia,melbourne
XXrica,ghana,accra

“^” indica l’inizio di linea e “..” indica i primi due caratteri

Visto che comunque di default sed parte dall’inizio di ogni riga, avremmo anche potuto scrivere semplicemente:
$ sed ‘s/../XX/’ file1

Anzichè sostituire, rimuovere i primi due caratteri:

$ sed 's/..//' file1
ropa,italia,roma
ia,cina,pechino
a,washington,washington
stralia,australia,melbourne
rica,ghana,accra

Rimuovere gli ultimi due caratteri:

$ sed 's/..$//' file1
europa,italia,ro
asia,cina,pechi
usa,washington,washingt
australia,australia,melbour
africa,ghana,acc

Aggiungere spazi vuoti all’inizio di ogni riga:

$ sed 's/^/ /' file1
 europa,italia,roma
 asia,cina,pechino
 usa,washington,washington

Se volgiamo che le modifiche non siano stampate in output ma vadano a modificare direttamente il file sorgente:

$ sed -i 's/^/ /' file1
telecom@PC-cons1:~$ cat file1
 europa,italia,roma
 asia,cina,pechino
 usa,washington,washington
 australia,australia,melbourne
 africa,ghana,accra

Rimuovere spazi vuoti dall’inizio e dalle fine di ogni riga:

$ sed 's/^ *//; s/ *$//' file1
europa,italia,roma
asia,cina,pechino
usa,washington,washington
australia,australia,melbourne
africa,ghana,accra

oppure:

$ sed -e 's/^ *//' -e 's/ *$//' file1
europa,italia,roma
asia,cina,pechino
usa,washington,washington
australia,australia,melbourne
africa,ghana,accra

Come abbiamo visto più comandi possono essere eseguiti in successione utilizzando il “;” oppure l’opzione di sed “-e”.

Aggiungere un carattere prima e dopo una stringa:

$ sed 's/.*/"&"/' file1
"europa,italia,roma"
"asia,cina,pechino"
"usa,washington,washington"
"australia,australia,melbourne"
"africa,ghana,accra"

“.*” -> matcha con l’intera riga
& -> sta per il pattern matchato

Altro esempio con “.*” e “&” (estremamente utili):

$ sed 's/.*/ndo sto? sto in &/' file1
ndo sto? sto in europa,italia,roma
ndo sto? sto in asia,cina,pechino
ndo sto? sto in usa,washington,washington
ndo sto? sto in australia,australia,melbourne
ndo sto? sto in africa,ghana,accra

Rimuovere il primo e l’ultimo carattere di ogni linea:

$ sed 's/^.//; s/.$//' file1
uropa,italia,rom
sia,cina,pechin
sa,washington,washingto
ustralia,australia,melbourn
frica,ghana,accr

Per proseguire modifichiamo file1:

$ cat file1
europa,001,italia,roma
asia,002,cina,pechino
usa,003,washington,washington
12345,australia,004,australia,melbourne
africa,005,ghana,accra

Rimuovere in ogni riga tutto ciò che precede un carattere che sia un numero:

$ sed 's/^[^0-9]*//' file1
001,italia,roma
002,cina,pechino
003,washington,washington
12345,australia,004,australia,melbourne
005,ghana,accra

Similmente se voglio cancellare tutta la parte precedente alla prima lettera:

$ sed 's/^[^a-zA-Z]*//' file1
europa,001,italia,roma
asia,002,cina,pechino
usa,003,washington,washington
australia,004,australia,melbourne
africa,005,ghana,accra

Se voglio rimuovere l’ultima parola di ogni riga:

$ sed 's/[a-zA-Z]*$//' file1
europa,001,italia,
asia,002,cina,
usa,003,washington,
12345,australia,004,australia,
africa,005,ghana,

Stampare l’ultima colonna:

$ sed 's/.*,//' file1
roma
pechino
washington
melbourne
accra

Convertire in maiuscolo:

$ sed 's/.*/\U&/' file1
EUROPA,001,ITALIA,ROMA
ASIA,002,CINA,PECHINO
USA,003,WASHINGTON,WASHINGTON
12345,AUSTRALIA,004,AUSTRALIA,MELBOURNE
AFRICA,005,GHANA,ACCRA

“\U” -> è lo switch di sed per la conversione in maiuscolo (uppercase)

similmente “\L” è lo switch per la conversione in minuscolo:

$ sed 's/.*/\U&/' file1 | sed 's/.*/\L&/'
europa,001,italia,roma
asia,002,cina,pechino
usa,003,washington,washington
12345,australia,004,australia,melbourne
africa,005,ghana,accra

————————————————-

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>