web-dev-qa-db-fra.com

Remplacer un espace par un point dans Bash

Je dois pouvoir faire est de remplacer un espace () par un point (.) dans une chaîne en bash.

Je pense que cela serait assez simple, mais comme je suis nouveau, je ne peux pas comprendre comment modifier un exemple similaire pour cet usage.

204
Brian Leishman

Utilisez le remplacement de chaîne inline Shell. Exemple:

foo="  "

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

# replace all blanks
bar=${foo// /.}

Voir http://tldp.org/LDP/abs/html/string-manipulation.html pour plus de détails.

350
Brian Clapper

Vous pouvez utiliser tr, comme ceci:

tr " " .

Exemple:

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

De man tr:

DESCRIPTION
Traduisez, pressez et/ou supprimez des caractères de l'entrée standard, en écrivant sur la sortie standard.

72
aioobe

En bash, vous pouvez faire remplacement du motif dans une chaîne avec la construction ${VARIABLE//PATTERN/REPLACEMENT}. Utilisez uniquement / et non // pour ne remplacer que la première occurrence. Le modèle est un modèle générique, comme les fichiers glob.

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

Essaye ça

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

Utiliser la substitution de paramètre:

string=${string// /.}
5
Fritz G. Mehner

Essayez ceci pour les chemins:

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

Il remplace l'espace à l'intérieur de la chaîne entre guillemets doubles par un + sing, puis remplace le signe + par une barre oblique inverse, puis supprime/remplace les guillemets.

Je devais l'utiliser pour remplacer les espaces dans l'un de mes chemins dans Cygwin.

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