2012-04-02 13 views

Odpowiedz

15

bez użycia narzędzi zewnętrznych:

echo ${STR1// /,} 

Demo:

$ STR1="This is a string" 
$ echo ${STR1// /,} 
This,is,a,string 

Zobacz bash: Manipulating strings.

+0

Czy istnieje sposób na wymuszenie tłumaczenia wielu spacji na pojedynczy przecinek (bez korzystania z narzędzia typu 'awk')? –

+1

@Kyle: jeśli masz 'extglob' na, możesz zrobić coś jak' $ {STR1 // +() /,} '. – Mat

10

Wystarczy użyć sed:

echo $STR1 | sed 's/ /,/g' 

lub czystego BASH drogę ::

echo ${STR1// /,} 
0
STR1=`echo $STR1 | sed 's/ /,/g'` 
2

Jak o

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

echo "$StrFix" 

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

Jeśli masz wiele sąsiadujących spacji kryteria wyszukiwania i co je zmniejszyć do zaledwie 1 przecinek, a następnie zmienić sed do

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

echo "$StrFix" 

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

Używam niestandardowy sed, a więc użyłem `` [[: spacja:]] [[: spacja:]] * to indicate one or more "white-space" characters (including tabs, VT, maybe a few others). In a modern sed, I would expect [[: spacja:]] + "również do pracy.

5
kent$ echo "STR1=This is a   string"|awk -v OFS="," '$1=$1' 
STR1=This,is,a,string 

Uwaga:

jeśli nie są kontynuowane półwyrobów, zostaną zastąpione jednym przecinkiem. jak pokazuje powyższy przykład.

1

To może pracować dla Ciebie:

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

lub:

echo 'STR1=This is a string' | tr ' ' ',' 
STR1=This,is,a,string 
Powiązane problemy