假设我有一个这样的字符串:
string=" this is a string "
删除重复的空格并获取以下字符串的最简单方法是什么:
string="this is a string"
答案 0 :(得分:3)
这一行应该适用于给定的例子:
awk '$1=$1' <<< $string
见测试:
kent$ x=" this is a string "
kent$ awk '$1=$1' <<< $x
this is a string
答案 1 :(得分:2)
无需像Awk那样使用外部二进制文件。你可以单独用Bash做到这一点。
string=" this is a string "
IFS=' ' read -a __ <<< "$string"; string="${__[@]}"
echo "$string"
this is a string
另一种解决方案:
shopt -s extglob ## need to be set only once.
string=${string##*([[:blank:]])}; string=${string%%*([[:blank:]])}; string=${string//+([[:blank:]])/ }
或仅限于空格($'\x20'
)
string=${string##*( )}; string=${string%%*( )}; string=${string//+( )/ }
答案 2 :(得分:1)
使用echo的解决方案:
string=$(echo $string)
答案 3 :(得分:0)
逐个字符遍历字符串。每当你得到两个连续的空格时,将数组向后移动一个字符
答案 4 :(得分:0)
让shell word-splitting为你工作(假设IFS
的默认值)。
string=" this is a string "
arr=($string)
printf -v string2 "%s" "${arr[*]}"
echo _${string2}_
_this is a string_