首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从字符串跨平台中提取版本

从字符串跨平台中提取版本
EN

Stack Overflow用户
提问于 2021-11-10 14:27:41
回答 6查看 148关注 0票数 1

我需要在makefile中创建一个行,它将从字符串中提取版本,并且可以跨平台工作,理想情况下不需要依赖项。

这就是我所拥有的

代码语言:javascript
复制
echo "golangci-lint has version 1.42.0 built..." | grep -oP '\d+\.\d+\.\d'

retuslt: 1.42.0

但对mac不起作用。

试着用sed这样做,但不起作用

代码语言:javascript
复制
echo "golangci-lint has version 1.42.0 built ..." | sed -n  's/.*\(\d+\.\d+\.\d\).*/\1/p'
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2021-11-10 14:48:34

代码语言:javascript
复制
grep -ow '[0-9][0-9.]\+[0-9]'

它只使用一个基本的正则表达式,以及BSD grep和GNU grep共享的选项。

票数 3
EN

Stack Overflow用户

发布于 2021-11-10 14:33:50

您可以使用

代码语言:javascript
复制
echo "golangci-lint has version 1.42.0 built ..." | sed -En  's/.*([0-9]+\.[0-9]+\.[0-9]+).*/\1/p'

详细信息

  • -E -启用POSIX syntax
  • n -默认行输出被抑制--任何文本,然后组1捕获一个或多个数字,.,一个或多个数字,.,一个或多个数字,以及line
  • \1的其余部分--只打印替换结果。
票数 1
EN

Stack Overflow用户

发布于 2021-11-10 14:36:05

使用所显示的示例,您可以尝试遵循awk程序,该程序将只输出整行中版本的匹配值。

代码语言:javascript
复制
echo "golangci-lint has version 1.42.0 built ..." | 
awk '
{
  match($0,/[0-9]+\.[0-9]+\.[0-9]+/)
  print substr($0,RSTART,RLENGTH)
}
'

解释:的简单解释是,在这里使用echo命令打印行的值,并将其输出作为标准输入发送到awk代码,其中使用match函数来匹配其中提到的正则表达式。如果有匹配,则打印匹配值。

正则表达式的解释:

[0-9]+\.[0-9]+\.[0-9]+:匹配1或更多的数字,然后是.,后面是1或更多的数字,后面是另一个点.,后面是1或更多的数字。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69915029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档