我是 UNIX 新手。
我有一个案例,我想从这些字符串(一次一个字符串)中提取版本号,如下所示,我应该怎么做?
release-2.15-5 > 2.15
release-2.15 > 2.15
2.15 > 2.15
2.15-5 > 2.15
我已经这样做了echo release-2.15-5 | cut -f1 -d'-'
,但结果不正确
答案1
鉴于没有那么多上下文,我建议您检查grep
提取此类信息的说明。例如,如果您的输入只是这种类型,您可以grep
按以下方式使用:
grep -Eo '[0-9]\.[0-9]+' filename
在哪里:
-E
是指示我们将使用扩展正则表达式的标志(检查这里了解更多信息)-o
是指定我们只需要在找到时返回精确匹配的标志[0-9]\.[0-9]+
是一个正则表达式,表示我们需要一个数字后跟一个点,然后是一个或多个尾随数字。请注意,点字符必须转义。否则,普通的点 ie.
将被视为“任意字符”。filename
是 grep 的输入
在您的示例中,这将返回以下内容:
2.15
2.15
2.15
2.15
另一方面,如果您只需要其中一个匹配项,那么您也可以使用head
管道连接到 grep,如下所示:
grep -Eo '[0-9]\.[0-9]+' filename | head -1