我有一个简单的变量字符串,它以这种形式出现: tag = v1.0.2-15 ,或 tag = v2.0.2-15 ....
我想从" v" 之后和" - " 之前提取部分以获取始终的数字部分 (= betwen" v"和" _")
这: 1.0.2
我用过:
$ echo (tag=v1.0.2-15 | sed -n '/tag=v/,/-/p')
和
$ echo (tag=v1.0.2-15 | cut -d'v' -f 2)
但目前还没有发挥作用。
还有其他简单的解决方案吗?
答案 0 :(得分:2)
bash
regEx
~
运算符
string="tag=v1.0.2-15"
[[ $string =~ ^.*v([[:graph:]]+)-.*$ ]] && printf "%s\n" "${BASH_REMATCH[1]}"
1.0.2
答案 1 :(得分:1)
一种选择是使用sed删除v
之前和-
之后的部分:
$ sed 's/.*v\|-.*//g' <<<'tag=v1.0.2-15'
1.0.2
这匹配任何后跟v
的内容,或-
之后的任何内容,并替换为空,留下您感兴趣的部分。
答案 2 :(得分:1)
使用grep的另一个简单解决方案可能如下所示:
echo 'tag=v1.0.2-15' |grep -oP '(?<=v).+(?=-)'
答案 3 :(得分:1)
使用if (round($invoice_grand_total, 2) > round($payment_details['TotalPayments'], 2)) {
和v
作为列分隔符并打印第二列:
-
输出:
1.0.2
答案 4 :(得分:1)
grep
的另一个简化版本环顾四周。
echo 'tag=v1.0.2-15' | grep -oP 'v\K.*?[^-]+'
1.0.2
使用sed
后退:
echo 'tag=v1.0.2-15' |sed -r 's/(^.+v)(.+)(-.*)/\2/g'
1.0.2