2012-04-02 37 views

Trả lời

15

Nếu không sử dụng công cụ bên ngoài:

echo ${STR1// /,} 

Demo:

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

Xem bash: Manipulating strings.

+0

Có cách nào để buộc nhiều không gian được dịch sang một dấu phẩy (không chuyển sang công cụ như 'awk') không? –

+1

@Kyle: nếu bạn có 'extglob', bạn có thể làm một cái gì đó như' $ {STR1 // +() /,} '. – Mat

10

Chỉ cần sử dụng sed:

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

hoặc tinh khiết BASH cách ::

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

Làm thế nào về

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

echo "$StrFix" 

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

Nếu bạn có nhiều không gian liền kề trong chuỗi của bạn và những gì để giảm họ chỉ 1 dấu phẩy, sau đó thay đổi sed để

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

echo "$StrFix" 

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

Tôi đang sử dụng một phi tiêu chuẩn sed, vv đã sử dụng `` [[: dấu cách:]] [[: dấu cách:]] * to indicate one or more "white-space" characters (including tabs, VT, maybe a few others). In a modern sed, I would expect [[: dấu cách:]] + `để hoạt động.

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

Lưu ý:

nếu có được tiếp tục khoảng trống, họ sẽ được thay thế bằng một dấu phẩy duy nhất. như ví dụ ở trên cho thấy.

1

Điều này có thể làm việc cho bạn:

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

hay:

echo 'STR1=This is a string' | tr ' ' ',' 
STR1=This,is,a,string 
Các vấn đề liên quan