Command line bash:从字符串中提取double
我在bash中有以下字符串: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} 假设周围的文字始终保持不变
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通常被认为是等效的。