我如何创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不被识别。