[英]Regex to match exact version phrase
我有这样的版本:
v1.0.3-preview2
v1.0.3-sometext
v1.0.3
v1.0.2
v1.0.1
我正在尝试获取非预览版的最新版本(版本号后没有文本),所以结果应该是: v1.0.3
我使用了这个 grep: grep -m1 "[v\d+\.\d+.\d+$]"
但它仍然输出: v1.0.3-preview2
我在这里可能会错过什么?
要返回模式v<num>.<num>.<num>
的第一个匹配项,请使用:
grep -m1 -E '^v[0-9]+(\.[0-9]+){2}$' file
v1.0.3
如果您输入的文件未排序,则使用grep | sort -V | head
grep | sort -V | head
grep | sort -V | head
为:
grep -E '^v[0-9]+(\.[0-9]+){2}$' f | sort -rV | head -1
当您在[...]
中使用^
或$
时,它们被视为文字字符而不是锚点。
正则表达式详细信息:
^
: 开始v
: 匹配v
[0-9]+
: 匹配 1+ 个数字(\.[0-9]+){2}
:匹配一个点,后跟 1+ 个点。 重复这组 2 次$
: 结束要将数字与 grep 匹配,您可以使用
grep -m1 "v[[:digit:]]\+\.[[:digit:]]\+\.[[:digit:]]\+$" file
请注意,您的模式中不需要[
和]
,并且可以转义点以匹配它。
使用awk
您可以尝试遵循awk
代码。
awk 'match($0,/^v[0-9]+(\.[0-9]+){2}$/){print;exit}' Input_file
Explanation of awk
code: Simple explanation of awk
program would be, using match
function of awk to match regex to match version, once match is found print the matched value and exit from program.
正则表达式匹配子字符串,而不是整个字符串。 您需要显式匹配模式的开始 ( ^
) 和结束 ( $
) 。
请记住, $
在 shell 脚本中的双引号字符串中具有特殊含义,需要进行转义。
边界字符需要在任何组( []
)之外。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.