提取2个字符之间的字符串

Det*_*Det 1 awk grep sed

假设我有一个看起来像这样的字符串:

nvidia-utils-beta 334.16-1
lib32-nvidia-utils-beta 334.16.1-2
Run Code Online (Sandbox Code Playgroud)

我想提取它所以它会产生:

334.16
334.16.1
Run Code Online (Sandbox Code Playgroud)

..分别.

怎么样?

ps我更喜欢非cut|cut解决方案.

Ken*_*ent 5

当我看到"提取"时,grep首先出现:

grep -Po '\S*(?=-\d+$)' file
Run Code Online (Sandbox Code Playgroud)

要么

grep -Po '\s\K[^-]*' file
Run Code Online (Sandbox Code Playgroud)

测试:

kent$  echo "nvidia-utils-beta 334.16-1
lib32-nvidia-utils-beta 334.16.1-2"|grep -Po '\S*(?=-\d+$)'
334.16
334.16.1

kent$  echo "nvidia-utils-beta 334.16-1
lib32-nvidia-utils-beta 334.16.1-2"|grep -Po '\s\K[^-]*'  
334.16
334.16.1
Run Code Online (Sandbox Code Playgroud)