解析man手册页的头部信息
命令语法格式
lexgrog [-m|-c] [-dfw?V] [-E encoding] file …
命令描述
lexgrog是传统的 “groff guess” 工具的一个lex实现。它从命令行读取man手册源文件或预格式化的“cat”页文件列表,并显示apropos和whatis所使用的手册名称和描述。预处理过滤器列表在传递给nroff或troff之前,man页面需要它。
如果它的输入是错误的,lexgrog 会打印 “parse failed”;这有助于外部程序检查man页面是否正确。如果lexgrog的输入文件是 “-”,它会从标准输入中读取;如果输入文件是压缩文件,将自动读取解压的版本。
命令支持的选项及含义
-d, –debug
打印调试信息。
-m, –man
将输入当作man页面源文件来解析。如果没有指定–man或–cat,这将是默认值。
-c, –cat
将输入当作预格式化的man页面来解析(“cat页面”)。不能同时指定–man和–cat。
-w, –whatis
显示来自man页面头部的名称和描述(apropos和whatis就使用这些信息)。这是未指定–whatis或–filters时的默认值。
-f, –filters
在用nroff或troff格式化之前,显示对man页面预处理所需的过滤器列表。
-E encoding, –encoding encoding
将页面编码设置为encoding,而非自动检测的编码。
-?, –help
打印帮助消息并退出。
–usage
打印简短的帮助消息并退出。
-V, –version
显示版本信息
状态码
0 程序成功执行。
1 用法错误。
2 命令lexgrog无法解析一个或多个输入文件
使用示例
$ lexgrog man.1
man.1: “man – an interface to the on-line reference manuals”
$ lexgrog -fw man.1
man.1 (t): “man – an interface to the on-line reference manuals”
$ lexgrog -c whatis.cat1
whatis.cat1: “whatis – display manual page descriptions”
$ lexgrog broken.1
broken.1: parse failed
WHATIS解析
mandb(使用与lexgrog相同的代码)解析每个手册页顶部的NAME部分来查找其中所说明对象的名称和描述。虽然解析器是相当宽容的,因为它必须应付许多不同的形式(在历史上已经被使用),但它有时可能无法提取所需的信息。
在使用传统的man宏集时,正确的NAME部分看起来是这样:
foo \- program to do something
一些手册分页程序要求‘\-’与上面显示的完全相同;不过mandb更宽松。尽管如此,保留反斜杠可以更好地兼容其他系统。
在左侧可能有几个以冒号分隔的名称。包含空格的名称将被忽略,以避免某些格式不太正确的NAME部分不正常。右侧的文字形式是任意的,可以占多行。如果同一手册页中叙述了几种不同的功能,将使用以下形式:
foo, bar \- programs to do something
.br
baz \- program to do nothing
(可以用一个开始新段落的宏,如.PP来代替换行的宏.br。)
若使用BSD衍生的mdoc宏集,正确的 NAME 节看起来是这样:
.Nm foo
.Nd program to do something
whatis解析失败可能有几种原因。有时文档作者将 ‘.SH NAME’ 替换成了 ‘.SH MYPROGRAM’,导致mandb找不到用来提取信息的这一节。有时作者包含了NAME节,但将‘name \- description’换成了普通的文本。不过任何遵循上面列出语法的用法都是可以授受的。
相关手册
apropos(1), man(1), whatis(1), mandb(8)
注意事项
lexgrog试图解析包含.so请求的文件,但只有文件正确安装到手册页层次结构路径中时才能正确处理。
参考文献
- man 1 lexgrog, version 2.7.6.1
更新日志
- 07/29/2017 首次完成文章。