2016-05-21 26 views
1

Ich habe eine Zeichenfolge wie folgt:bash: Wie füge ich Leerzeichen hinzu?

string="aaa-bbb" 

Aber ich will Raum vor char hinzufügen ‚-‘, so möchte ich dies:

aaa -bbb 

ich viele Dinge ausprobiert, aber ich kann Füge dort keinen Platz hinzu. Ich habe versucht, mit echo $string | tr '-' ' -', und einigen anderen Sachen, aber es hat nicht funktioniert ...

Ich habe Linux Mint: GNU bash, Version 4.3.8 (1)

Antwort

5

Keine Notwendigkeit sed zu nennen, verwenden string substitution nativen in BASH:

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

Beachten Sie die zwei Schrägstriche nach dem Variablennamen: die erste Schrägstrich ersetzt das erste Vorkommen, wobei zwei Schrägstriche jedes Vorkommen ersetzen.

1

Probieren Sie dazu:

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

es sucht nach - und ersetzt sie durch - (Raum Bindestrich)

1

tr kann nur zu einem Zeitpunkt, um ein Zeichen ersetzen. was Sie suchen ist sed:

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

1

Bash hat eingebaute String-Substitution.

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

Alternativ können Sie sed verwenden:

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

Du die Shell fragt eine un zitierte Variable $string Echo.
Wenn das passiert, werden Räume in Variablen verwendet, um die Zeichenfolge zu spalten:

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

Die Variable, die Leerzeichen enthalten, nur, dass Sie es nicht richtig sehen. Quote your expansions

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

Ihre Variable --- geändert zu bekommen gibt es viele Lösungen:

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

Verwandte Themen