2016-05-21 1 views
1

J'ai une chaîne comme ceci:bash: Comment ajouter de l'espace dans une chaîne?

string="aaa-bbb" 

Mais je veux ajouter un espace avant char « - », donc je veux ceci:

aaa -bbb 

J'ai essayé beaucoup de choses, mais je peux ne pas ajouter de l'espace là-bas. J'ai essayé avec echo $string | tr '-' ' -', et d'autres choses, mais cela n'a pas fonctionné ...

J'ai Linux Mint: GNU bash, la version 4.3.8 (1)

Répondre

5

Pas besoin d'appeler sed, utilisez string substitution natif dans BASH:

$ foo="abc-def-ghi" 
$ echo "${foo//-/ -}" 
abc -def -ghi 

Notez les deux barres obliques après le nom de la variable: la première barre oblique remplace la première occurrence, où deux barres obliques remplacent chaque occurrence.

1

donner un essai à ceci:

printf "%s\n" "${string}" | sed 's/-/ -/g' 

il cherche - et le remplacer par - (trait d'union de l'espace)

1

tr ne peut substituer un caractère à la fois. ce que vous cherchez est sed:

echo "$string" | sed 's/-/ -/'

1

Bash a une substitution de chaîne intégrée.

result="${string/-/ -}" 
echo "$result" 

Vous pouvez également utiliser sed:

result=$(echo "$string" | sed 's/-/ -/') 
echo "$result" 
1

Vous demandez au shell pour faire écho un non coté en bourse variables $string.
Lorsque cela se produit, à l'intérieur des espaces variables sont utilisées pour diviser la chaîne:

$ string="a -b -c" 
$ printf '<%s>\n' $string 
<a> 
<-b> 
<-c> 

La variable ne contient les espaces, juste que vous ne voyez pas correctement. Quote your expansions

$ printf '<%s>\n' "$string" 
<a -b -c> 

Pour obtenir votre variable changé --- il existe de nombreuses solutions:

sed: string="$(echo "$string" | sed 's/-/ -/g')"; echo "$string"
bash: string="${string//-/ -}; echo "$string"