我有一个这样的字符串:
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
或者,您可以使用sed
或perl
:
$ 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/-/ -/'