【问题标题】:bash: extract double from stringbash:从字符串中提取双精度
【发布时间】:2011-04-28 15:21:45
【问题描述】:

我在 bash 中有这个字符串:

str=sdk.iphoneos4.1.sdk

我想要一个包含“4.1”的变量

有没有办法在 bash 中解析浮点/双精度值?

【问题讨论】:

  • 同理,从上面的字符串中提取4.1?如果是这样,您应该可以使用grep 来完成它,尽管我对此没有经验。不过,这里的一位 grep 大师将能够为您提供帮助!
  • 版本号是整数列表,而不是浮点数。例如,4.1 和 4.001 通常被认为是等效的。

标签: command-line bash shell string parsing


【解决方案1】:

假设周围的文字始终保持不变:

str=${str#sdk.iphoneos}
str=${str%.sdk}

这不太便携(仅限bash),但可以接受任何东西来代替iphoneos

shopt -s extglob
str=${str##sdk.*([a-z])}
str=${str%.sdk}

【讨论】:

    【解决方案2】:

    假设其他地方没有其他数字

    $ str=sdk.iphoneos4.0.0.1.sdk
    $ echo $str | grep -Po '(\d+.*\d+)(?=\.)'
    4.0.0.1
    

    【讨论】:

      【解决方案3】:

      在 Bash 3.2 或更高版本中:

      str=sdk.iphoneos4.1.sdk
      pattern='[0-9]+\.[0-9]+'
      [[ $str =~ $pattern ]]
      echo ${BASH_REMATCH[0]}
      

      【讨论】:

        猜你喜欢
        • 2018-06-13
        • 1970-01-01
        • 1970-01-01
        • 2022-11-21
        • 2013-02-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多