在bashshell中删除字符串中带有逗号的空格

在bashshell中删除字符串中带有逗号的空格,bash,Bash,我想用逗号替换字符串中的空格/空格 STR1=This is a string 到 只需使用sed: echo $STR1 | sed 's/ /,/g' 或者纯粹的猛击方式:: echo ${STR1// /,} 怎么样 STR1="This is a string" StrFix="$( echo "$STR1" | sed 's/[[:space:]]/,/g')" echo "$StrFix" **output** This,is,a,string 如果字符串中有多个相邻空

我想用逗号替换字符串中的空格/空格

STR1=This is a string 

只需使用sed:

echo $STR1 | sed 's/ /,/g'
或者纯粹的猛击方式::

echo ${STR1// /,}
怎么样

STR1="This is a string"
StrFix="$( echo "$STR1" | sed 's/[[:space:]]/,/g')"

echo "$StrFix"

**output**
This,is,a,string
如果字符串中有多个相邻空格,并且要将它们减少为1个逗号,则将
sed
更改为

STR1="This is    a    string"
StrFix="$( echo "$STR1" | sed 's/[[:space:]][[:space:]]*/,/g')"

 echo "$StrFix"

**output**
This,is,a,string

我使用的是非标准的sed,因此我使用了“`[:space:][[:space:][]*
来表示一个或多个“空白”字符(包括制表符、VT,可能还有一些其他字符)。在现代sed中,我希望
[[:space:]+`也能正常工作。

无需使用外部工具:

echo ${STR1// /,}
演示:

注意:


如果有连续的空格,它们将被替换为一个逗号。如上例所示。

这可能适合您:

echo 'STR1=This is a string' | sed 'y/ /,/'
STR1=This,is,a,string
或:


是否应该用一个逗号替换两个连续的空格?是否有办法强制将多个空格转换为一个逗号(而不必使用
awk
)之类的工具?@Kyle:如果启用了
extglob
,您可以执行类似
${STR1/+()/,}
。这几乎肯定是大多数访问此问题的人都在寻找的答案,而不是将一系列空格替换为一系列逗号的变体。我认为这应该是最好的答案,因为如果有不好的空格,顶部的答案也会在末尾加逗号。
echo ${STR1// /,}
$ STR1="This is a string"
$ echo ${STR1// /,}
This,is,a,string
kent$  echo "STR1=This is a           string"|awk -v OFS="," '$1=$1'
STR1=This,is,a,string
echo 'STR1=This is a string' | sed 'y/ /,/'
STR1=This,is,a,string
echo 'STR1=This is a string' | tr ' ' ','  
STR1=This,is,a,string