U-Boot版本提取用于比较

时间:2016-03-24 11:28:38

标签: regex linux bash embedded-linux busybox

我正在尝试从其二进制文件中提取U-Boot版本以进行比较,
考虑我要搜索的确切字符串如下,

U-Boot 2013.07.010 (Mar 21 2016 - 12:07:48)

所以我用正则表达式编写命令如下,

strings uboot | grep "U-Boot \([0-9]\{4\}.[0-9]\{2\}.[0-9]\{3\}\ ([a-z]\{3\} [0-9]\{2\} [0-9]\{4\} - [0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\})\)"

但是我没有看到上述命令的任何输出,

我可以进行以下命令工作,只通过比较版本而不是在字符串

中查找日期来提取版本
strings uboot | grep "U-Boot \([0-9]\{4\}.[0-9]\{2\}.[0-9]\{3\}\)"

有人可以纠正/建议我在第一个命令中做错了吗? 还有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

你的第一个命令中的正则表达式被破坏了,你需要为了正确的匹配而逃避几个像点这样的字符,也需要匹配月份,即你需要的Mar [A-Za-z]{3}但是你只指定了{{} 1}}

您也可以使用[a-z]{3}开关打印出匹配的部分。来自-o的手册页:

  

-o, - 仅匹配                 仅打印匹配行的匹配(非空)部分,每个此类部分位于单独的输出行上。

要仅提取版本,请使用其中任何一个:

grep