Sostituisci uno spazio con un periodo in Bash

Devo essere in grado di fare è sostituire uno spazio ( ) con un punto ( . ) in una stringa in bash.

Penso che sarebbe abbastanza semplice, ma sono nuovo quindi non riesco a capire come modificare un esempio simile per questo uso.

Utilizzare la sostituzione della stringa di shell inline. Esempio:

 foo=" " # replace first blank only bar=${foo/ /.} # replace all blanks bar=${foo// /.} 

Vedi http://tldp.org/LDP/abs/html/string-manipulation.html per maggiori dettagli.

Potresti usare tr , come questo:

 tr " " . 

Esempio:

 # echo "hello world" | tr " " . hello.world 

man tr :

DESCRIZIONE
Tradurre, spremere e / o cancellare caratteri dallo standard input, scrivendo sullo standard output.

In bash, è ansible eseguire la sostituzione del modello in una stringa con il costrutto ${VARIABLE//PATTERN/REPLACEMENT} . Utilizzare solo / e non // per sostituire solo la prima occorrenza. Il modello è un modello jolly, come i globi di file.

 string='foo bar qux' one="${string/ /.}" # sets one to 'foo.bar qux' all="${string// /.}" # sets all to 'foo.bar.qux' 

Prova questo

  echo "hello world" | sed 's/ /./g' 

Usa la sostituzione dei parametri:

 string=${string// /.} 

Prova questo per i percorsi:

 echo \"hello world\"|sed 's/ /+/g'|sed 's/+/\/g'|sed 's/\"//g' 

Sostituisce lo spazio all’interno della stringa doppia citazione con un + cantare, quindi sostituisce il segno + con una barra rovesciata, quindi rimuove / sostituisce le doppie virgolette.

Ho dovuto usare questo per sostituire gli spazi in uno dei miei percorsi in Cygwin.

 echo \"$(cygpath -u $JAVA_HOME)\"|sed 's/ /+/g'|sed 's/+/\\/g'|sed 's/\"//g'