如何在Bash中向字符串添加空格?

6

我有一个字符串,类似于这样:

string="aaa-bbb"

但我想在字符“-”之前添加空格,所以我希望得到这样的结果:
aaa -bbb

我尝试了很多方法,但是我无法添加空格。我尝试使用echo $string | tr '-' ' -'和其他一些方法,但都没有起作用...

我的操作系统是Linux Mint: GNU bash,版本为4.3.8(1)

5个回答

12

不需要调用sed,可以使用 BASH 中本地的字符串替换功能:

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

请注意变量名后面的两个斜杠:第一个斜杠用于替换第一次出现的字符,而第二个斜杠则用于替换所有的字符。


2

Bash内置了字符串替换功能。

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

另外,您可以使用 sedperl

$ string="aaa-bbb"
$ result=$(sed 's/-/ -/' <<< $string)
$ echo "$result"
aaa -bbb
$ result=$(perl -pe 's/-/ -/' <<< $string)
$ echo "$result"
aaa -bbb

1

尝试一下这个:

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

它寻找-并将其替换为-(空格连字符)

1

tr 只能替换一个字符,而你需要的是 sed:

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


1
您正在要求shell回显未加引号的变量$string
这时,变量内部的空格会被用于分割字符串。
$ string="a -b -c"
$ printf '<%s>\n' $string
<a>
<-b>
<-c>

变量确实包含空格,只是你没有正确地看到它。 引用您的扩展
$ printf '<%s>\n' "$string"
<a -b -c>

要将您的变量从-更改为-,有许多解决方案:
sed:string =“ $(echo“ $ string”| sed' s /- / - / g')”; echo“ $ string”
bash:string =“ $ {string // - / - } ; echo“ $ string”

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接