「lexgrog(1)」-

解析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部分看起来是这样:

.SH NAME

foo \- program to do something

一些手册分页程序要求‘\-’与上面显示的完全相同;不过mandb更宽松。尽管如此,保留反斜杠可以更好地兼容其他系统。

在左侧可能有几个以冒号分隔的名称。包含空格的名称将被忽略,以避免某些格式不太正确的NAME部分不正常。右侧的文字形式是任意的,可以占多行。如果同一手册页中叙述了几种不同的功能,将使用以下形式:

.SH NAME

foo, bar \- programs to do something

.br

baz \- program to do nothing

(可以用一个开始新段落的宏,如.PP来代替换行的宏.br。)

若使用BSD衍生的mdoc宏集,正确的 NAME 节看起来是这样:

.Sh 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 首次完成文章。