出于格式化目的,我想用空格替换String的所有字符。
STR="some string of unknown length"
SPC=" " <--- this is what I want
在this page的帮助下,我能想到的最好的是:
SPC=${STR//[a-Z]/ }
但这只会替换字母,而不是数字或任何特殊字符。什么是&#34;任何角色的占位符&#34;用这种类型的Bash字符串替换?
答案 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'