有没有一个Python的grub.cfg解析器?

7

有没有人知道一个用于解析grub2的grub.cfg文件的Python解析器?

我正在尝试通过设备分区(根目录)获取“menuentry”,例如:

hd0,msdos1: ['Ubuntu, with Linux 3.0.0-15-generic',
            'Ubuntu, with Linux 3.0.0-15-generic (recovery mode)',
            'Ubuntu, with Linux 3.0.0-14-generic']
hd2,msdos1: ["Windows 7 (on /dev/sdc1)"]

etc.

Solution:

re.findall("menuentry ['\"](.*?)['\"].*?set root='(.*?)'", x, re.S)

[('Ubuntu, with Linux 3.0.0-15-generic', '(hd0,msdos1)'),('Ubuntu,使用Linux 3.0.0-15-generic','(hd0,msdos1)'),('Ubuntu,使用Linux 3.0.0-15-generic(恢复模式)','(hd0,msdos1)'),('Ubuntu,使用Linux 3.0.0-14-generic','(hd0,msdos1)'),('Ubuntu,使用Linux 3.0.0-14-generic(恢复模式)','(hd0,msdos1)'),('Ubuntu,使用Linux 3.0.0-13-generic','(hd0,msdos1)'),('Ubuntu,使用Linux 3.0.0-13-generic(恢复模式)','(hd0,msdos1)'),('Ubuntu,使用Linux 3.0.0-12-generic','(hd0,msdos1)'),('Ubuntu,使用Linux 3.0.0-12-generic(恢复模式)','(hd0,msdos1)'),('内存测试(memtest86+)','(hd0,msdos1)'),('内存测试(memtest86+,串行控制台115200)','(hd0,msdos1)'),('Windows 7(位于/dev/sdc1)','(hd2,msdos1)')]
注:这是一段关于操作系统引导的信息,其中列出了可用的操作系统和相应的启动位置。

哦,你们这些人什么都想让别人替你们做...你只需要编写那个解析器,就会感到很有趣! - Oleh Prypin
1
不,我只是在问是否有一个。无论如何,我用正则表达式和re.S(DOTALL)找到了一种替代方法。 - Savvas Radevic
2个回答

3

我不知道是否有Python解析grub.cfg的工具,但您无需解析整个文件即可获取所需信息。以下是您要查找的数据格式:

menuentry "<name>" [options] {
  ...
  set root='<root>'
  ...
}

所以查找以menuentry开头的行,从该行中解析名称,并扫描直到下一个带有set root=}行。

0

你能在你的回答中加入一些例子吗?谢谢! - Savvas Radevic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接