如何让sed做非贪婪的比赛?

Red*_*ket 3 regex bash sed

我似乎无法弄清楚如何为我的bash命令行提出正确的正则表达式.这就是我在做的事情:

echo "XML-Xerces-2.7.0-0.tar.gz" | sed -e's/^\(.*\)-[0-9].*/\1/g'
Run Code Online (Sandbox Code Playgroud)

这给了我......的输出

XML-Xerces-2.7.0
Run Code Online (Sandbox Code Playgroud)

...但我希望我需要输出...

XML-Xerces
Run Code Online (Sandbox Code Playgroud)

......我猜我能做到这一点......

 echo "XML-Xerces-2.7.0-0.tar.gz" | sed -e's/^\(.*\)-[0-9].*/\1/g' | sed -e's/^\(.*\)-[0-9].*/\1/g'
Run Code Online (Sandbox Code Playgroud)

...但我想知道如何sed更好地理解正则表达式.

更新:

我试过这个......

echo "XML-Xerces-2.7.0-0.tar.gz" | sed -e's/^\([^-]*\)-[0-9].*/\1/g'
Run Code Online (Sandbox Code Playgroud)

......作为建议但是产出 XML-Xerces-2.7.0-0.tar.gz

Pau*_*aul 6

你不能在sed中做非贪婪的正则表达式,但你可以这样做:

echo "XML-Xerces-2.7.0-0.tar.gz" | sed -e 's/^\(\([^-]\|-[^0-9]\)*\).*/\1/g'
Run Code Online (Sandbox Code Playgroud)

哪个会捕获所有内容,直到找到-后跟[0-9].