从字符串中删除空格

时间:2013-09-08 21:06:12

标签: bash

假设我有一个这样的字符串:

string="   this    is a string     "

删除重复的空格并获取以下字符串的最简单方法是什么:

string="this is a string"

5 个答案:

答案 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_