我正在构建一个引用手册页的资源,我想知道是否有人知道访问手册页的方法结构化的数据?我目前的方法是做一个很多如果使用正则表达式,但这很乏味并且容易出错。
我不是 *nix 方面的专家,但我对手册页的理解是,它们基本上是具有可由命令解析的特定语法的文本文件man
。这让我有点怀疑是否有一种简单的方法可以访问选项或标志列表。但也许有一种我不知道的方法可以做到这一点。
答案1
您可能会看看如何鱼壳建立其手册页的补全特别是如何__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>
$
那是手册页呈现为 HTML,然后在使用时选择X路径获取概要部分中的标志列表;如今使用 CSS 选择器可能更流行。然而,生成的 HTML 不是很结构化。
答案2
手册页是罗夫格式化文本文件,不幸的是,这是目前解析格式化语言中最令人恼火的文件之一。通过查看系统使用的任何 roff 实现的文档(它几乎总是nroff
、troff
或 之一groff
),您可能会幸运地找到您想要的内容。格式本身有点复杂(它是在极简主义是良好软件设计缩影的时代设计的),但大多数手册页的结构相当一致,所以应该不会太难。
除此之外,您还有其他一些选择。首先是查看软件源代码分发中手册页的源代码。如今,大多数软件都将其手册页编译为由 man 程序从其他格式解析的 roff 源代码,其中大多数比 roff 宏更容易解析。另一种是研究groff
将手册页转换为其他格式的工具(包括 ),如 thrig 的答案中所建议的。
答案3
查看人服务器这是 1999 年的 Perl 脚本,它以简单的方式解析手册页并将其呈现为网页。它包含解释 troff 源代码所需的所有 Perl 代码。