用Augeas镜头附近的圆括号?

我如何创build一个Augeas镜头,让我从括号内提取一个值域?

背景:

我正在开发一个Augeas镜头来pipe理OpenVAS的NASL文件。 我需要能够对大量这些脚本进行一些任意的修改。

NASL包含很多键和值对,它们全都被括号括起来,如下所示,有时也有多个值。

这是我正在使用的示例行。 我的testing脚本中没有使用换行符,注释等。 这里的线是我正在使用的。

script_id(100197) 

我试图用于提取的基本格式是:

 let digits = store /\d+/ let oparen = Util.del_str "(" let cparen = Util.del_str ")" (* script_id(100197); *) let script_id = [ key "script_id" . oparen . digits . cparen ] 

由此产生的错误是:

 Error encountered at 1:0 (0 characters into string) <|=|script_id(100197)> Tree generated so far: <blank> 

你需要问的第一个问题是你想从这个string生成哪棵树。 你如何期待Augeasparsingscript_id(100197)

假设你想parsing它,例如:

 { "script_id" = "100197" } 

你可以用下面的代码parsing这个:

 let script_id = let oparen = Util.del_str "(" in let cparen = Util.del_str ")" in [ key "script_id" . oparen . store Rx.integer . cparen . Util.eol ] 

你可以添加一个unit testing来检查它是否工作:

 test script_id get "script_id(100197)\n" = ? 

并在文件上启动augparse

 $ augparse openvas.aug Test result: openvas.aug:10.0-.44: { "script_id" = "100197" } 

请注意,Augeas只支持POSIX基本正则expression式,所以\d不被识别。