我的脚本需要使用正则表达式查找特定的Linux内核版本 - 3.13.0-24-generic。
我试过了:
'((2\.[46])|(3\.[0-99])\.\d[^\/]*?) \(.*@.*\) [#]\d+.*'
但它不起作用。我怎样才能匹配我的内核版本?为什么上面的正则表达式无法匹配3.13.0-24-generic?
基于评论的附加信息:
我正在编辑SystemImager UseYourOwnKernel.pm脚本。原始脚本检查2.4或2.6内核:
my $regex =
# | kernel version + build machine
# `---------------------------------------
'(2\.[46]\.\d[^\/]*?) \(.*@.*\) [#]\d+.*' .
3.0,1,2,(即单个数字3.X内核)适用于:
'((2\.[46])|(3\.[012])\.\d[^\/]*?) \(.*@.*\) [#]\d+.*'
我可以使用以下命令来匹配3.13和(3.0,3.1,3.2等)内核:
'((2\.[46])|(3\.[012]|3\.13)\.\d[^\/]*?) \(.*@.*\) [#]\d+.*' .
我需要一个匹配3.0到3.99的数值范围(这应该照顾所有3.X版本)。
答案 0 :(得分:1)
你的正则表达式是,
(?:[0-9]|[1-9][0-9])\.(?:[0-9]|[1-9][0-9])\.(?:[0-9]|[1-9][0-9])-(?:[0-9]|[1-9][0-9])-\w+
<强>解释强>
(?:[0-9]|[1-9][0-9])
匹配0-99之间的任何数字。
\.
一个文字点。
-
文字-
或强>
更短的一个,
(?:(?:[0-9]|[1-9][0-9])\.){2}(?:(?:[0-9]|[1-9][0-9])-){2}\w+
答案 1 :(得分:0)
此代码可能对您有所帮助:
(?:(?:[\d]|[1-9][\d])\.){2}(?:(?:[0-9]|[1-9][0-9])-){2}\w+