【问题标题】:How to remove all non-numeric characters from a string in Bash?如何从 Bash 中的字符串中删除所有非数字字符?
【发布时间】:2013-11-12 12:31:56
【问题描述】:

例子:

file="123 hello"

如何编辑字符串file,使其仅包含数字并删除文本部分?

所以,

echo $file

应该只打印123

【问题讨论】:

    标签: linux bash shell ubuntu terminal


    【解决方案1】:

    这是sed的一种方式:

    $ echo $file | sed 's/[^0-9]*//g' 
    123
    $ echo "123 he23llo" | sed 's/[^0-9]*//g'
    12323
    

    或者用纯bash

    $ echo "${file//[!0-9]/}" 
    123
    $ file="123 hello 12345 aaa"
    $ echo "${file//[!0-9]/}" 
    12312345
    

    要将结果保存到变量本身,请执行以下操作

    $ file=$(echo $file | sed 's/[^0-9]*//g')
    $ echo $file
    123
    
    $ file=${file//[!0-9]/}
    $ echo $file
    123
    

    【讨论】:

    • 为了完整起见,您还可以使用纯 bash 形式将结果保存回相同的变量中:file=${file//[!0-9]/}。此外,您通常可以将echo something | command 替换为 command <<< something
    • 好点,@MarkReed。根据那种用户的要求,我宁愿把答案留得很天真,因为<<< 对于开始使用 bash-script 的人来说可能很奇怪。我用file=$file{file//[!0-9]/} 更新我的答案,非常感谢!
    • 希望对版本字符串执行此操作(例如 git version 1.7.1)?使用${gitVersion//[!0-9.]/} 并保留句点。
    • 出于好奇,为什么这个命令不删除字符串中的空格?这实际上是我想要的行为,但不明白为什么它是默认的。
    • @LukeDavis 不确定您尝试了什么,但我测试过并且确实有效:file="hola que tal 23" 然后echo "${file//[!0-9]/}" 返回 23。
    【解决方案2】:

    你可以说:

    echo ${file%%[^0-9]*}
    

    但是,这在某些情况下会遇到问题:

    $ file="123 file 456"
    $ echo ${file%%[^0-9]*}
    123
    

    使用tr

    $ file="123 hello 456"
    $ new=$(tr -dc '0-9' <<< $file)
    $ echo $new
    123456
    

    【讨论】:

    • “某些情况”? ${file%%[^0-9]*} 将始终删除从第一个非数字到字符串末尾的所有内容。 %% 根本不是你想要的(%### 也不是)。我觉得我在这里错过了一个笑话。
    • 亲爱的@MarkReed,我认为您所说的在答案本身中已经明确,或者没有?可能这就是提出另一种方法的原因。我在这里错过了什么吗?
    • @devnull 我只是无法理解在转身并提供正确解决方案之前提出明显不正确的解决方案的目标,然后评论您自己的答案,声称它存在严重问题.也许这是一种教学技巧,而不是玩笑,但无论哪种方式,我都担心它完全超出了我的想象。
    • @devnull,我希望我能对 cme​​ts 投反对票。这里没有人身攻击的地方。
    • 我给这个答案+1。第一个解决方案在一些简单的情况下可能很有用,例如 OP 提供的示例。因此,尽管我倾向于始终使用sed,但我认为提出此解决方案没有任何问题。此外,devnull 已经警告了第一个解决方案的局限性,并给出了另一个运行良好的解决方案。更多解决方案,更多财富。
    猜你喜欢
    • 2011-10-19
    • 1970-01-01
    • 1970-01-01
    • 2010-11-17
    • 2013-01-19
    • 2010-12-04
    • 1970-01-01
    • 2013-04-30
    • 2014-04-26
    相关资源
    最近更新 更多