我似乎无法弄清楚如何为我的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
你不能在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].