使用 Augeas 镜头时值周围有括号吗?

使用 Augeas 镜头时值周围有括号吗?

我如何创建一个 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无法识别。

相关内容