我如何创建一个 Augeas 镜头,以便我从括号内提取值字段?
背景:
我正在启动 Augeas 镜头来管理 OpenVAS 的 NASL 文件。我需要能够对大量这些脚本进行一些任意更改。
NASL 包含大量的键和值对,它们都用括号括起来,如下所示,有时具有多个值。
这是我正在使用的样例行。我还没有在测试脚本中使用任何换行符、注释等。这里的行正是我正在使用的。
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 ]
而 Augparse 产生的错误是:
Error encountered at 1:0 (0 characters into string)
<|=|script_id(100197)>
Tree generated so far:
<blank>
答案1
您需要问的第一个问题是您想从这个字符串生成哪棵树。您希望 Augeas 如何解析script_id(100197)
。
假设您想将其解析为,例如:
{ "script_id" = "100197" }
你可以用下面的代码来解析它:
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 ]
您可以添加单元测试来检查它是否正常工作:
test script_id get "script_id(100197)\n" = ?
并启动augparse
文件:
$ augparse openvas.aug
Test result: openvas.aug:10.0-.44:
{ "script_id" = "100197" }
请注意,Augeas 仅支持 POSIX 基本正则表达式,因此\d
无法识别。