Bash 用“提取两个较大字符串字符之间的字符串”;削减;或;sed";
我有一个简单的变量字符串,其形式如下: tag=v1.0.2-15,或tag=v2.0.2-15 我想从中提取“v”之后和“-”之前的部分,以始终获得数字部分(=介于“v”和“”) 这:1.0.2 我用过: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.
$ 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
也很好,这个也很好,这个