如何访问手册页作为结构化内容

eme*_*his 3 command-line man documentation roff groff

我正在构建一个引用手册页的资源,我想知道是否有人知道将手册页作为结构化数据访问的方法?如果 REGEXing,我目前的方法是做很多事情,但这很乏味并且容易出错。

我不是 *nix 的专家,但我对手册页的理解是,它们基本上是具有特定语法的文本文件,可由man命令解析。这让我有点怀疑可能有一种简单的方法来访问选项或标志的列表。但也许有一种我不知道的方法。

thr*_*rig 5

您可能会从手册页中查看fish shell如何构建其完成,特别是如何__fish_complete_man工作。一个更简单的选择groff可能是发出 HTML,然后使用众多 HTML 解析器中的一个来获得你想要的:

$ groff -T html -mdoc xpquery.1 | xpquery -p HTML '//p[b="xpquery"][2]' -
<p style="margin-left:17%;"><b>xpquery</b>
[<b>?E </b><i>encoding</i>]
[<b>?n </b><i>namespace</i>]
[<b>?p </b><i>method</i>]
[<b>?S </b><i>xpath-subquery</i>]
[<b>?t </b><i>timeout</i>] <i>xpath-query
file-or-url ..</i></p>
$ 
Run Code Online (Sandbox Code Playgroud)

这是一个呈现为 HTML的手册页,然后使用XPath选择以获取 SYNOPSIS 部分中的标志列表;这些天使用 CSS 选择器可能更时髦。但是,生成的 HTML 不是很结构化。