Есть ли Python grub.cfg парсер? - PullRequest
3 голосов
/ 12 февраля 2012

Кто-нибудь знает парсер python для файла grub2.cfg в grub2?

Я пытаюсь получить "menuentry" по разделу устройства (root), например,

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)"]

и т.д.

Решение:

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

[('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 (on / dev / sdc1)', '(hd2, msdos1)')]

1 Ответ

2 голосов
/ 12 февраля 2012

Мне не известен анализатор Python для grub.cfg, но вам не нужно анализировать весь файл для этой информации.Это формат данных, которые вы ищете:

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

Так что ищите строки, начинающиеся с menuentry, анализируйте имя из этой строки и сканируйте до следующей строки с }для set root=.

...