使用 '\' 在 Augeas 中表示多行值

使用 '\' 在 Augeas 中表示多行值

我最近在 Augeas 中组装了一个镜头,但现在它的功能不太理想。

我的文件包含一些具有以下语法的参考:

Value1 = KEY 32 OR\
   KEY 33 OR\
   ....

我如何表示反斜杠换行符组合并将其视为同一值的一部分?

编辑-我正在运行版本 .10.0

...
  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.indented_title_label "target" IniFile.record_label_re
  let entry    = [ key IniFile.entry_re . sep . IniFile.sto_to_comment . (comment|IniFile.eol) ] |
                 [ key IniFile.entry_re . store // . (comment|IniFile.eol) ] |
                 [ key /\![A-Za-z][A-Za-z0-9\._-]+/ . del / / " " . store /\/[A-Za-z0-9\.\/_-]+/ . (comment|IniFile.eol) ] |
                 comment

  let record    = IniFile.record title entry
  let record_anon = [ label ".anon" . ( entry | empty )+ ]

  let lns       = record_anon | record*

...

答案1

您的镜头不是为多行条目编写的。如果您想支持多行条目,您需要使用IniFile.entry_multiline

let entry_multiline (kw:regexp) (sep:lens) (comment:lens)
                       = [ key kw . sep . sto_multiline? . (comment|eol) ] | comment

但是,这个定义不能识别\为行继续符,因为至今我从未见过 IniFile 使用它。虽然\它通常用作各种键/值格式的行继续符,但 IniFile 通常只是使用缩进来确定一行是否是上一行的延续。

需要注意的是,我认为您的定义并不是lns您真正想要的:

let lns       = record_anon | record*

意思是“一个record_anon,后跟零个、一个或多个record”,而我猜你的意思是“零个、一个或多个record_anon,后跟零个、一个或多个record”,也就是:

let lns       = record_anon* . record*

相关内容