Tôi muốn thay thế khoảng trống/khoảng trắng trong một chuỗi bằng dấu phẩy.Xóa dấu cách trống bằng dấu phẩy trong một chuỗi trong bash shell
STR1=This is a string
để
STR1=This,is,a,string
Tôi muốn thay thế khoảng trống/khoảng trắng trong một chuỗi bằng dấu phẩy.Xóa dấu cách trống bằng dấu phẩy trong một chuỗi trong bash shell
STR1=This is a string
để
STR1=This,is,a,string
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
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? –
@Kyle: nếu bạn có 'extglob', bạn có thể làm một cái gì đó như' $ {STR1 // +() /,} '. – Mat
Chỉ cần sử dụng sed:
echo $STR1 | sed 's/ /,/g'
hoặc tinh khiết BASH cách ::
echo ${STR1// /,}
STR1=`echo $STR1 | sed 's/ /,/g'`
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.
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.
Đ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ó nên 2 không gian liên tục được thay thế bằng một dấu phẩy? –