如何在bash中提取部分字符串?

时间:2016-05-18 20:49:38

标签: bash shell sh

如何在bash中提取部分字符串?假设我有一个字符串product_name_v1.2。此名称不固定,因为它可以更改。但有一点可以肯定的是,字符串中的版本号为v#.#

我想要做的是从字符串中提取v1.21.2。有什么建议吗?

4 个答案:

答案 0 :(得分:1)

var=product_name_v1.2
#from the beginning strip (#) longest (##) glob ending in v (*v)
echo "${var##*v}

Bash也有正则表达式匹配([[=~),但basic string manipulation应该足以满足您的使用案例。

(您还可以查看bash(1)了解更多信息。)

答案 1 :(得分:1)

在任何POSIX shell中,这都很简单:

SecureRandom

构造str=product_name_v1.2 version=${str##*_v} echo $version #=> 1.2 名称 ${ 模式 ##删除参数{{1}的内容的最长前缀}名称匹配glob 模式,只留下它后面的内容。

答案 2 :(得分:1)

假设您想从字符串中提取数字和点:

input="product_name_v1.2_more_stuff_here"
echo "${input//[^0-9.]/}"
1.2

答案 3 :(得分:0)

您可以使用几种标准工具,例如:

  • expr product_name_v1.2 : 'product_name_\(.*\)'
  • expr product_name_v1.2 : '.*_\(v.*\)'
  • echo product_name_v1.2 | sed -ne's/^.*_\(v[0-9.]\+\)$/\1/p'

选择主要取决于匹配的复杂程度。 expr仅支持有限的锚定正则表达式匹配,在上面的示例中就足够了。