【发布时间】:2016-09-18 23:13:17
【问题描述】:
我有一个这样的字符串:
string="aaa-bbb"
但我想在 char '-' 之前添加空格,所以我想要这个:
aaa -bbb
我尝试了很多东西,但我无法在那里添加空间。我尝试了echo $string | tr '-' ' -' 和其他一些东西,但它没有用......
我有 Linux Mint:GNU bash,版本 4.3.8(1)
【问题讨论】:
我有一个这样的字符串:
string="aaa-bbb"
但我想在 char '-' 之前添加空格,所以我想要这个:
aaa -bbb
我尝试了很多东西,但我无法在那里添加空间。我尝试了echo $string | tr '-' ' -' 和其他一些东西,但它没有用......
我有 Linux Mint:GNU bash,版本 4.3.8(1)
【问题讨论】:
无需调用sed,在BASH中使用string substitution原生:
$ foo="abc-def-ghi"
$ echo "${foo//-/ -}"
abc -def -ghi
注意变量名后面的两个斜杠:第一个斜杠替换第一个出现的位置,其中两个斜杠替换每个出现的位置。
【讨论】:
试试这个:
printf "%s\n" "${string}" | sed 's/-/ -/g'
它查找- 并将其替换为-(空格连字符)
【讨论】:
您要求 shell 回显未引用的变量 $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"
【讨论】:
tr 一次只能替换一个字符。你要找的是sed:
echo "$string" | sed 's/-/ -/'
【讨论】:
Bash 具有内置的字符串替换功能。
result="${string/-/ -}"
echo "$result"
您也可以使用sed:
result=$(echo "$string" | sed 's/-/ -/')
echo "$result"
【讨论】: