Bash 用“提取两个较大字符串字符之间的字符串”;削减;或;sed";

Bash 用“提取两个较大字符串字符之间的字符串”;削减;或;sed";,bash,shell,Bash,Shell,我有一个简单的变量字符串,其形式如下: tag=v1.0.2-15,或tag=v2.0.2-15 我想从中提取“v”之后和“-”之前的部分,以始终获得数字部分(=介于“v”和“”) 这:1.0.2 我用过: $ echo (tag=v1.0.2-15 | sed -n '/tag=v/,/-/p') 及 但这暂时不起作用 任何其他简单解决方案?一个选项是使用sed移除v之前和-之后的零件: $ sed 's/.*v\|-.*//g' <<<'tag=v1.0.2-15' 1.

我有一个简单的变量字符串,其形式如下: tag=v1.0.2-15,或tag=v2.0.2-15

我想从中提取“v”之后和“-”之前的部分,以始终获得数字部分(=介于“v”和“”)

这:1.0.2

我用过:

$ echo (tag=v1.0.2-15 | sed -n '/tag=v/,/-/p')

但这暂时不起作用


任何其他简单解决方案?

一个选项是使用sed移除
v
之前和
-
之后的零件:

$ sed 's/.*v\|-.*//g' <<<'tag=v1.0.2-15'
1.0.2

$sed's/*v\|-.*//g'一个选项是使用sed移除
v
之前和
-
之后的零件:

$ sed 's/.*v\|-.*//g' <<<'tag=v1.0.2-15'
1.0.2

$sed's/*v\|-.*//g'另一个使用grep的简单解决方案可能如下所示:

echo'tag=v1.0.2-15'|grep-oP'(?另一个使用grep的简单解决方案可能如下所示:

echo'tag=v1.0.2-15'| grep-oP'(?使用
v
-
作为列分隔符,并打印第二列:

awk -F'[v-]' '{print $2}' <<< 'tag=v1.0.2-15'

awk-F'[v-]'{print$2}'使用
v
-
作为列分隔符并打印第二列:

awk -F'[v-]' '{print $2}' <<< 'tag=v1.0.2-15'

awk-F'[v-]'{print$2}'另一个简化版的
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

另一个简化版的
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

bash
regEx
中使用
~
运算符

string="tag=v1.0.2-15"
[[ $string =~ ^.*v([[:graph:]]+)-.*$ ]] && printf "%s\n" "${BASH_REMATCH[1]}"
1.0.2

bash
regEx
中使用
~
运算符

string="tag=v1.0.2-15"
[[ $string =~ ^.*v([[:graph:]]+)-.*$ ]] && printf "%s\n" "${BASH_REMATCH[1]}"
1.0.2

也很好,这个也很好,这个