我需要在makefile中创建一个行,它将从字符串中提取版本,并且可以跨平台工作,理想情况下不需要依赖项。
这就是我所拥有的
echo "golangci-lint has version 1.42.0 built..." | grep -oP '\d+\.\d+\.\d'
retuslt: 1.42.0但对mac不起作用。
试着用sed这样做,但不起作用
echo "golangci-lint has version 1.42.0 built ..." | sed -n 's/.*\(\d+\.\d+\.\d\).*/\1/p'发布于 2021-11-10 14:48:34
grep -ow '[0-9][0-9.]\+[0-9]'它只使用一个基本的正则表达式,以及BSD grep和GNU grep共享的选项。
发布于 2021-11-10 14:33:50
您可以使用
echo "golangci-lint has version 1.42.0 built ..." | sed -En 's/.*([0-9]+\.[0-9]+\.[0-9]+).*/\1/p'详细信息
-E -启用POSIX syntaxn -默认行输出被抑制--任何文本,然后组1捕获一个或多个数字,.,一个或多个数字,.,一个或多个数字,以及line\1的其余部分--只打印替换结果。发布于 2021-11-10 14:36:05
使用所显示的示例,您可以尝试遵循awk程序,该程序将只输出整行中版本的匹配值。
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或更多的数字。
https://stackoverflow.com/questions/69915029
复制相似问题