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.
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.
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.
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'
Essaye ça
echo "hello world" | sed 's/ /./g'
Utiliser la substitution de paramètre:
string=${string// /.}
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'