Command line bash:从字符串中提取double

Command line bash:从字符串中提取double,command-line,bash,shell,string,parsing,Command Line,Bash,Shell,String,Parsing,我在bash中有以下字符串: str=sdk.iphoneos4.1.sdk 我想要一个里面有'4.1'的变量 有没有办法解析bash中的float/double值?假设周围的文本始终保持不变: str=${str#sdk.iphoneos} str=${str%.sdk} 它的可移植性较差(bash),但可以接受任何东西来代替iphoneos: shopt -s extglob str=${str##sdk.*([a-z])} str=${str%.sdk} 假设周围的文字始终保持不变

我在bash中有以下字符串:

str=sdk.iphoneos4.1.sdk
我想要一个里面有'4.1'的变量


有没有办法解析bash中的float/double值?

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

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

它的可移植性较差(
bash
),但可以接受任何东西来代替
iphoneos

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

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

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

它的可移植性较差(
bash
),但可以接受任何东西来代替
iphoneos

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

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

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

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

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

在Bash 3.2或更高版本中:

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

在Bash 3.2或更高版本中:

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

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