使用无标头的Augeas INI镜头

我正在使用带有augeas的IniFile模块来创buildSplunkpipe理镜头。 这适用于所有包含节标题的文件,如正常的INI文件,但是有一些文件不遵循这个scheme,只是使用name = value对。

有没有一个现成的方法来映射这些条目没有定义为一般的东西,如主? 我宁愿不必为第二种文件types学习另一个模块,现在就可以避免它。

module Splunk = autoload xfm let comment = IniFile.comment IniFile.comment_re IniFile.comment_default let sep = IniFile.sep IniFile.sep_re IniFile.sep_default let setting = IniFile.record_re let title = IniFile.title ( IniFile.record_re ) let entry = IniFile.entry steting sep comment let record = IniFile.record title entry let lns = IniFile.lns record comment let filter = incl "/etc/splunk/*.conf" let xfm = transform lns filter test lns get "[section]\ntest-value=yes\n" = ? test lns get "test=yes\n" = ? 

PHP镜头提供了类似的function,在定义的部分之前支持INI文件中的设置。 我已经适应了这个镜头,并固定本应使用IniFile.entry_re的“设置”镜头,以避免含糊不清。

 module Splunk = autoload xfm let comment = IniFile.comment IniFile.comment_re IniFile.comment_default let sep = IniFile.sep IniFile.sep_re IniFile.sep_default let empty = IniFile.empty let setting = IniFile.entry_re let title = IniFile.title ( IniFile.record_re - ".anon" ) let entry = IniFile.entry setting sep comment let record = IniFile.record title entry let record_anon = [ label ".anon" . ( entry | empty )+ ] let lns = record_anon | record* let filter = incl "/etc/splunk/*.conf" let xfm = transform lns filter test lns get "[section]\ntest-value=yes\n" = ? test lns get "test=yes\n" = ? 

将生成的树看起来像这样,在“.anon”节点下的部分之外的所有设置:

 Test result: splunk.aug:20.2-.31: { ".anon" { "test" = "yes" } } 

这个节点是必要的,以避免模糊的方向。 举一个例子,如果你的任务是把这个树写回到一个文件中:

 { "foo" } 

它可以写成只是[foo] (节名)或foo= (节外的一个设置)。 “.anon”子树可以确保这种转换没有歧义。 要删除它,并有一个平坦的结构,你需要为每种types的文件创build第二个模块/镜头,我认为这是一个更自然的解决scheme。 在同一个文件中混合使用的PHP情况下,“.anon”节点更有意义。

当您完成并添加testing时,请将您的镜头提交给Augeas项目,我们希望将其包含在内。 通过trac提交或发送到列表 。