如何从 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