2016-05-21 7 views
1

У меня есть строка, как это:bash: Как добавить пробел в строку?

string="aaa-bbb" 

Но я хочу, чтобы добавить пробел перед символом «-», так что я хочу это:

aaa -bbb 

Я пробовал много вещей, но я не могу Там нет места. Я попытался с echo $string | tr '-' ' -', и некоторыми другими вещами, но это не сработало ...

У меня есть Linux Mint: GNU Баш, версия 4.3.8 (1)

ответ

5

Нет необходимости вызывать sed, использовать string substitution родной в BASH:

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

Обратите внимание на две косые после имени переменной: первый слэш заменяет первое вхождение, где два слэша заменяют каждое вхождение.

1

Дайте попробовать это:

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

Он ищет - и заменить его - (пробел дефиса)

1

tr может только заменить один символ за один раз. то, что вы ищете, 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"
Баш: string="${string//-/ -}; echo "$string"