我想获取一个可能包含多个空格的字符串,并执行以下操作:
1)用下划线替换空格
2)删除任何非A-Z或0-9
的字符3)将结果全部小写
然后可以将结果用作变量。有什么想法吗?
答案 0 :(得分:2)
我认为tr可以做你想做的事。
variable=$(echo "${input}" | tr A-Z a-z | tr [:blank:] _ | tr -cd [:alnum:]_)
说明:
tr A-Z a-z
- 将较高的信件翻译成较低的信件。
tr [:blank:] _
- 将空格转换为下划线。
tr -cd [:alnum:]_
- 删除非字母数字或下划线的所有字符。
注意:如果要在将空格转换为下划线之前删除下划线,可以在管道链的开头附近添加tr -cd _
。
答案 1 :(得分:2)
这是使用sed的另一种方法:
oldvar="HELLO MY BABY @$#@$ HI"
newvar=`echo $oldvar | sed -e "s/[A-Z]/\l&/g" -e "s/[^a-z0-9]/_/g"`
结果:
hello_my_baby__0___hi
答案 2 :(得分:0)
newvar=`echo "$oldvar" | awk '{gsub(/[ \t]+/,"_") ; gsub(/[^A-Z0-9]+/,"") ; print tolower($0)}' `