在shell脚本中从字符串中过滤掉非字母字符

时间:2013-06-18 11:09:50

标签: regex bash shell scripting

非常简单的问题,但似乎无法找到一个简单的答案......

我正在编写一个bash脚本,需要删除所有非字母和非数字字符。例如。我想......

INPUT_STRING="ABC# .1-2-3"

OUTPUT_STRING= # some form of processing on $INPUT_STRING #

echo $OUTPUT_STRING
ABC123

我意识到使用正则表达式最好解决这个问题,但不确定如何在脚本中有效地使用它。

所有人都非常感谢...

2 个答案:

答案 0 :(得分:9)

$ INPUT_STRING="ABC# .1-2-3"
$ printf '%s\n' "${INPUT_STRING//[![:alnum:]]}"
ABC123

答案 1 :(得分:8)

您可以使用sed删除所有不是a-zA-Z0-9的字符:

$ echo "ABC# .1-2-3" | sed 's/[^a-zA-Z0-9]//g'
ABC123

所以在你的情况下,

$ INPUT_STRING="ABC# .1-2-3"
$ OUTPUT_STRING=$(echo $INPUT_STRING | sed 's/[^a-zA-Z0-9]//g')
$ echo $OUTPUT_STRING
ABC123