.*sed太贪心了

Off*_*rmo 3 regex grep sed

我想从bash中的某些字符串中提取版本号而不使用太多额外的包.到目前为止我试过了sed.

这是API:

3.81-8.1ubuntu1.1    should give :  3.81
2.68-1ubuntu2        should give :  2.68
1:1.11.3-1ubuntu2    should give :  1.11.3
Run Code Online (Sandbox Code Playgroud)

到目前为止,这是我的sed命令:

echo ... | sed -r 's/.*([0-9\.]+).*/\1/'
Run Code Online (Sandbox Code Playgroud)

然而,开场.*太贪心,尤其是最后一个案例.我已经尝试了一些.*?,并.\{-}没有任何成功.

我可以两次通过,但我宁愿学习如何在一个中完成.

Ken*_*ent 8

这对你好吗?

 grep -Po "[\d\.]*(?=-)" file
Run Code Online (Sandbox Code Playgroud)

例:

kent$  cat tt
3.81-8.1ubuntu1.1
2.68-1ubuntu2
1:1.11.3-1ubuntu2

kent$  grep -Po "[\d\.]*(?=-)" tt
3.81
2.68
1.11.3
Run Code Online (Sandbox Code Playgroud)