2016-05-21 6 views
1

は、私はこのような文字列があります。bash:文字列にスペースを追加するには?

string="aaa-bbb" 

をしかし、私は、charの前にスペースを追加する「 - 」ので、私はこれ欲しい:私は多くのことを試してみましたが、私ができる

aaa -bbb 

そこにスペースを追加しないでください。 4.3.8は、(1)

答えて

5

sedを呼び出すBASHでstring substitutionネイティブを使用する必要はありません:

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

2つのスラッシュ、変数名の後:最初のスラッシュは最初のオカレンスを置き換えます。ここでは2つのスラッシュがすべてのオカレンスを置き換えます。

1

はこれに試してみてはGNU bashのバージョン:

は、私がLinuxのミントを持っている...私は echo $string | tr '-' ' -'、およびいくつかの他のものを試してみましたが、それはうまくいきませんでした
printf "%s\n" "${string}" | sed 's/-/ -/g' 

それは-を探して-(スペースハイフン)と交換してください

1

trは、一度に1つの文字を置き換えることができます。あなたが探していることはsedです:

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

1

Bashには文字列置換が組み込まれています。

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

別の方法としては、sedを使用することができます。

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

あなたは非引用された変数$stringをエコーするためにシェルを求めています。
それが起こる、変数の内部空間は、文字列を分割するために使用されています

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

変数は、あなたがそれを正しく表示されないだけという、スペースを含みません。 Quote your expansions

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

あなたの変数は、多くのソリューションがある--から変更を取得するには、次のsed

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

は、
関連する問題