【问题标题】:Filter non-alphabetic characters out of string in shell script从 shell 脚本中的字符串中过滤掉非字母字符
【发布时间】:2013-06-14 13:54:31
【问题描述】:

很简单的问题,但似乎找不到简单的答案...

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

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

OUTPUT_STRING= # some form of processing on $INPUT_STRING #

echo $OUTPUT_STRING
ABC123

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

非常感谢所有帮助...

【问题讨论】:

    标签: regex bash shell scripting


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

    【讨论】:

    • 或者更确切地说,OUTPUT_STRING="${INPUT_STRING//[![:alnum:]]}"
    • 谢谢,我没有注意到@Rich 想将修改后的值存储在变量中。不过我会使用OUTPUT_STRING=${INPUT_STRING//[![:alnum:]]},赋值语句的右侧不受外壳词/字段拆分的影响,所以引号是多余的。
    • 看到又一个纯 BASH 解决方案输给了懒惰的分叉 sed/awk/perl P.O.S.,这让我很伤心
    • 我刚玩过这个解决方案,发现它真的很有用。谢谢! read MYNUMBER && echo "${MYNUMBER//[![:digit:]]}"
    【解决方案2】:

    您可以使用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
    

    【讨论】:

      猜你喜欢
      • 2020-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-06
      • 2018-09-28
      • 1970-01-01
      • 2016-01-05
      • 2018-09-11
      相关资源
      最近更新 更多