Chciałbym zastąpić puste spacje/białe spacje ciągiem przecinkami.Usuń puste przestrzenie z przecinkiem w ciągu w powłoce bash
STR1=This is a string
do
STR1=This,is,a,string
Chciałbym zastąpić puste spacje/białe spacje ciągiem przecinkami.Usuń puste przestrzenie z przecinkiem w ciągu w powłoce bash
STR1=This is a string
do
STR1=This,is,a,string
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.
Czy istnieje sposób na wymuszenie tłumaczenia wielu spacji na pojedynczy przecinek (bez korzystania z narzędzia typu 'awk')? –
@Kyle: jeśli masz 'extglob' na, możesz zrobić coś jak' $ {STR1 // +() /,} '. – Mat
Wystarczy użyć sed:
echo $STR1 | sed 's/ /,/g'
lub czystego BASH drogę ::
echo ${STR1// /,}
STR1=`echo $STR1 | sed 's/ /,/g'`
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.
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.
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
2 kolejne przestrzenie powinny zostać zastąpione przez jeden przecinek? –