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

Ric*_*ich 6 regex bash shell scripting

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

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

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

OUTPUT_STRING= # some form of processing on $INPUT_STRING #

echo $OUTPUT_STRING
ABC123
Run Code Online (Sandbox Code Playgroud)

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

所有帮助非常感谢......

fed*_*qui 10

您可以sed用来剥离所有不是的字符a-z,A-Z或者0-9:

$ echo "ABC# .1-2-3" | sed 's/[^a-zA-Z0-9]//g'
ABC123
Run Code Online (Sandbox Code Playgroud)

所以在你的情况下,

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


Dim*_*lov 10

$ INPUT_STRING="ABC# .1-2-3"
$ printf '%s\n' "${INPUT_STRING//[![:alnum:]]}"
ABC123
Run Code Online (Sandbox Code Playgroud)

  • 看到另一种纯BASH解决方案因懒惰的分叉sed / awk / perl POS失败而使我心痛 (2认同)