转义字符串,并使其unix准备好

时间:2010-07-29 17:13:59

标签: unix shell batch-file

我想获取一个可能包含多个空格的字符串,并执行以下操作:

1)用下划线替换空格

2)删除任何非A-Z或0-9

的字符

3)将结果全部小写

然后可以将结果用作变量。有什么想法吗?

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)}' `