如何将字符串转换为Bash中的所有空格?

时间:2015-12-03 15:16:02

标签: string bash unix replace

出于格式化目的,我想用空格替换String的所有字符。

STR="some string of unknown length"
SPC="                             " <--- this is what I want

this page的帮助下,我能想到的最好的是:

SPC=${STR//[a-Z]/ }

但这只会替换字母,而不是数字或任何特殊字符。什么是&#34;任何角色的占位符&#34;用这种类型的Bash字符串替换?

2 个答案:

答案 0 :(得分:8)

您可以使用:

str="some string of unknown length"
spc="${str//[^[:space:]]/ }"

[^[:space:]]将匹配任何非空格字符并将其替换为空格。

验证

echo "$str" | wc -c
30
echo "$spc" | wc -c
30

PS:你也可以这样做:

spc="${str//?/ }"

获取只包含空格的相同长度的字符串。 ?匹配glob中的任何字符。

答案 1 :(得分:3)

这是一种替代方案(根本没有正则表达式/解析)解决方案:

STR='some string of unknown length.' # Actually 30 chars
# Create an SCP var of the same length of STR filled with spaces (# updated implementation, thanks gniourf_gniourf)
printf -v SCP '%*s' ${#STR}

<强>测试

echo "${STR}"                 # 'some string of unknown length.'
echo "${SCP}"                 # '                              '
echo "Length STR -> ${#STR}"  # 'Length STR -> 30'
echo "Length SCP -> ${#SCP}"  # 'Length SCP -> 30'

工作原理

printf命令在变量SCP中写入一个字符串,其长度至少等于STR${#STR})的字符数。

技巧在s未被替换,因为${#STR}之后没有其他参数。

使用示例

printf '%*s' 3       # '   '
printf '%*s' 3 .     # '  .'
printf '%*s' 3 123   # '123'
printf '%*s' 3 12345 # '12345'