我想查看手册页中的标题列表,而不阅读所有手册页。例如,在 bash 手册页 ( man bash.1
) 中有很多标题:NAME
、SYNOPSIS
、COPYRIGHT
、DESCRIPTION
等。本质上,我想要一个像本页顶部所示的列表HTML 手册页。有没有办法在命令行中本地获取它?
如果您想使用与他们提供的名称不同的名称(“语法”而不是“语法”)搜索某个部分,或者有时您甚至不知道要查找什么,这可能会很有用。
答案1
在系统上使用mandoc
,您可以要求 markdown 格式的输出,然后简单地grep
要求以 开头的行#
:
$ man -T markdown man | grep '^#'
# NAME
# SYNOPSIS
# DESCRIPTION
# ENVIRONMENT
# FILES
# EXIT STATUS
# EXAMPLES
# SEE ALSO
# STANDARDS
# HISTORY
对于这不起作用的手册,您可以改为通过 HTML:
$ man -T html git | xmlstarlet sel -t -v '//h1/@id' -nl
NAME
SYNOPSIS
DESCRIPTION
OPTIONS
GIT_COMMANDS
HIGH
LOW
GUIDES
CONFIGURATION_MECHANISM
IDENTIFIER_TERMINOLOGY
SYMBOLIC_IDENTIFIERS
FILE/DIRECTORY_STRUCTURE
TERMINOLOGY
ENVIRONMENT_VARIABLES
DISCUSSION
FURTHER_DOCUMENTATION
AUTHORS
REPORTING_BUGS
SEE_ALSO
GIT
NOTES
答案2
编辑:
我意识到手册页标题是唯一左对齐的文本(大多数情况下)。您可以/^\w
在打开手册页并使用 / 向上/向下滚动后N
进行简单搜索n
。
如果您想在脚本中查找标题,我下面的原始答案或其他人的答案可能会有所帮助。
原来的:
幸运的是,我找到了一个基于的解决方案这个答案(如果这对您有帮助,请给他们点赞)。
zcat $(man -w bash.1) | grep -i '^\.sh'
man -w
获取手册页源的位置(例如/usr/share/man/man1/bash.1.gz
)。zcat
动态解压缩源并将其发送到stdout
.并且该grep
调用搜索以.sh
(不区分大小写) 开头的行,这些行标记了“节标题”。
这会忽略小节标题 ( .ss
),但您可以通过将过滤器更改为'^\.s[sh]'
(感谢 Thomas)来解决这个问题。
答案3
更短、更简单的替代方案是 grep 以空格以外的内容开头的行:
$ man git | grep '^\S'
GIT(1) Git Manual GIT(1)
NAME
SYNOPSIS
DESCRIPTION
OPTIONS
GIT COMMANDS
HIGH-LEVEL COMMANDS (PORCELAIN)
LOW-LEVEL COMMANDS (PLUMBING)
GUIDES
CONFIGURATION MECHANISM
IDENTIFIER TERMINOLOGY
SYMBOLIC IDENTIFIERS
FILE/DIRECTORY STRUCTURE
TERMINOLOGY
ENVIRONMENT VARIABLES
DISCUSSION
FURTHER DOCUMENTATION
AUTHORS
REPORTING BUGS
SEE ALSO
GIT
NOTES
Git 2.32.0 06/06/2021 GIT(1)
这些额外的行也可以删除:
$ man git | grep '^\S' | sed '1d;$d'
NAME
SYNOPSIS
DESCRIPTION
OPTIONS
GIT COMMANDS
HIGH-LEVEL COMMANDS (PORCELAIN)
LOW-LEVEL COMMANDS (PLUMBING)
GUIDES
CONFIGURATION MECHANISM
IDENTIFIER TERMINOLOGY
SYMBOLIC IDENTIFIERS
FILE/DIRECTORY STRUCTURE
TERMINOLOGY
ENVIRONMENT VARIABLES
DISCUSSION
FURTHER DOCUMENTATION
AUTHORS
REPORTING BUGS
SEE ALSO
GIT
NOTES
如果您已经浏览过它less
(即,当您刚刚查看时会发生什么man git
),您可以使用&
仅显示匹配的行。 IOW,您可以输入&^\S
并less
仅显示标题(以及第一行和最后一行)。要返回显示整个联机帮助页,您可以键入&
then Enter。