bash:如何在字符串中添加空格



我有一个这样的字符串:

string="aaa-bbb"

但是我想在字符"-"之前添加空格,所以我想要这个:

aaa -bbb

我尝试了很多东西,但我无法在那里添加空间。我尝试了echo $string | tr '-' ' -'和其他一些东西,但它没有用......

我有Linux Mint: GNU bash,版本4.3.8(1)

无需调用 sed,在 BASH 中使用原生字符串替换:

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

请注意变量名后面的两个斜杠:第一个斜杠替换第一个斜杠,其中两个斜杠替换每个匹配项。

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

试试这个:

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

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

您要求外壳回显一个不带引号的变量$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"

tr一次只能替换一个字符。 您要查找的是sed

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

相关内容

  • 没有找到相关文章

最新更新