bash 从“1.2.3-SNAPSHOT”中提取子字符串

bash 从“1.2.3-SNAPSHOT”中提取子字符串

如何从 bash 的 1.2.3-SNAPSHOT 中提取 1.2.3 的子串?

我试过

echo '1.2.3-SNAPSHOT' | grep -o "^.*(?=(\-SNAPSHOT$))"

但没用

理想情况下,如果输入是 1.2.3 或 1.2.3-SNAPSHOT,我希望命令在这两种情况下都返回 1.2.3

答案1

bash 参数扩展应该足够了

var='1.2.3-SNAPSHOT'
echo "${var%%-*}"
1.2.3
var='1.2.3'
echo "${var%%-*}"
1.2.3

答案2

你可以例如。egrep像这样使用:

echo "1.2.3-SNAPSHOT" | egrep -o '[0-9]+.[0-9]+.[0-9]'

它涵盖了您所描述的场景:

如果输入是 1.2.3 或 1.2.3-SNAPSHOT,则在两种情况下都返回 1.2.3

但我怀疑版本也可能是这样的:“3.1.33”(第三个数字中有更多数字),在这种情况下只需添加一个*就可以了

echo "3.12.32-SNAoiashfsof" | egrep -o '[0-9]+.[0-9]+.[0-9]*'

答案3

sed -ne's/^\(1\.2\.3\)\(-SNAPSHOT\)\{0,1\}$/\1/p' <in >out

...将打印1.2.3仅输出与以下任意一个完全匹配的输入行1.2.3或者1.2.3-SNAPSHOT

答案4

另外一个选择...

echo "1.2.3-SNAPSHOT" | cut -d'-' -f1

相关内容