如何在bash中提取部分字符串?假设我有一个字符串product_name_v1.2
。此名称不固定,因为它可以更改。但有一点可以肯定的是,字符串中的版本号为v#.#
。
我想要做的是从字符串中提取v1.2
和1.2
。有什么建议吗?
答案 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
仅支持有限的锚定正则表达式匹配,在上面的示例中就足够了。