bash 参数扩展:删除同一字符的多次出现
bash parameter-expansion: removing multiple occurences of the same character
它是 GNU bash,版本 4.4.20(1)-release (x86_64-pc-linux-gnu)。
我有带有文本的变量。例如:
var="this is a variable with some text :)"
现在我想让 var2
具有相同的内容,但多个空格替换为单个空格。
我知道我们可以用 sed、tr、awk 和其他数百种方法来做到这一点……但是有没有机会用 bash 执行的参数扩展来做到这一点?
尝试过:
var=${var/ / } # replacing 2 spaces with 1, but not much helps
var=${var/[ ]*/ } # this replaces space and whatever follows.... bad idea
var=${var/*( )/} # found this in man bash, whatever it does it still doesnt help me...
var2=$(echo $var)
希望 echo 能解决问题 - 没有解决问题,因为它不保留制表符等特殊字符..
我强烈希望用 man bash
提供的东西解决它。
*( )
是一个 扩展的 glob,需要使用 shopt -s extglob
启用它才能使用它匹配零个或多个 spaces.
不过,正确的替换是用单个 space 替换 一个 或多个 spaces (+( )
)。您还需要使用 ${var// ...}
替换 每个 出现的多个 space,而不仅仅是第一个。
$ shopt -s extglob
$ echo "$var"
this is a variable with some text :)
$ echo "${var//+( )/ }"
this is a variable with some text :)
它是 GNU bash,版本 4.4.20(1)-release (x86_64-pc-linux-gnu)。 我有带有文本的变量。例如:
var="this is a variable with some text :)"
现在我想让 var2
具有相同的内容,但多个空格替换为单个空格。
我知道我们可以用 sed、tr、awk 和其他数百种方法来做到这一点……但是有没有机会用 bash 执行的参数扩展来做到这一点?
尝试过:
var=${var/ / } # replacing 2 spaces with 1, but not much helps
var=${var/[ ]*/ } # this replaces space and whatever follows.... bad idea
var=${var/*( )/} # found this in man bash, whatever it does it still doesnt help me...
var2=$(echo $var)
希望 echo 能解决问题 - 没有解决问题,因为它不保留制表符等特殊字符..
我强烈希望用 man bash
提供的东西解决它。
*( )
是一个 扩展的 glob,需要使用 shopt -s extglob
启用它才能使用它匹配零个或多个 spaces.
不过,正确的替换是用单个 space 替换 一个 或多个 spaces (+( )
)。您还需要使用 ${var// ...}
替换 每个 出现的多个 space,而不仅仅是第一个。
$ shopt -s extglob
$ echo "$var"
this is a variable with some text :)
$ echo "${var//+( )/ }"
this is a variable with some text :)