2012-02-12 9 views
2

grub2のgrub.cfgファイル用のpythonパーサを知っている人はいますか?python grub.cfgパーサーはありますか?

私はデバイスパーティション(ルート)で「メニューエントリ」を取得しようとしています。

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) 

[( 'LinuxでのUbuntu、3.0.0-15-ジェネリック'、 '(HD0、msdos1)')、( 'Ubuntu、Linux 3.0.0-14-generic'、 '(hd0、msdos1)')、 ( 'Linux 3.0.0-15-ジェネリック(リカバリモード)'、 '(hd0、msdos1)'の ) ')、' Ubuntu、Linux 3.0.0-14-一般(リカバリモード) '、'(hd0、msdos1) ')、( 'Ubuntu、Linux 3.0.0-13-generic'、 '(hd0、msdos1)')、 'Ubuntu、Linux 3.0.0-13-ジェネリック(リカバリモード)'、 '(hd0、msdos1)'、) ')、 (' Ubuntu、Linux 3.0.0-12-generic '、'(hd0、msdos1) ')、' Ubuntu、Linux 3.0.0-12-一般(リカバリモード)メモリテスト (memtest86 +、シリアルコンソール115200) '、'(hd0、msdos1) ')、 ('メモリテスト(memtest86 +) '、'(hd0、msdos1) ') ( 'Windows 7の (の/ dev/sdc1など)'、 '(HD2、msdos1)')]

+0

ああ、皆さんはあなたのためにすべてが欲しいと思っています...ただそのパーサを作って、あなたはたくさんの楽しみがあります! –

+0

いいえ、私はちょうど1つがあるかどうか尋ねています。とにかく、regexとre.S(DOTALL)の代替案が見つかりました。 –

答えて

1

私はgrub.cfgのためのPythonのパーサを認識してないんだけど、あなたがする必要はありませんその情報のファイル全体を解析します。だから、menuentryで始まる行を探し、その行から名前を解析し、set root=ため}と次の行までスキャン

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

:これは、あなたが探しているデータの形式です。

関連する問題