如何在不显示内容的情况下列出所有具有特定文本的手册页?

Ant*_*nyK 3 man

我想在所有系统手册页中搜索某个字符串,但我只想获取出现此文本的手册页列表。Google 返回的前 2 页结果没有提供我想要的答案,如果存在这样的答案的话。

让我解释:

我想查看hairpin出现该词的所有手册页。我继续输入man -K hairpin,出现的内容与我输入的内容相似man nmcli。当我通过 退出此手册页时q,屏幕上会出现以下内容:

--Man-- next: bridge(8) [ view (return) | skip (Ctrl-D) | quit (Ctrl-C) ]
Run Code Online (Sandbox Code Playgroud)

从这里,我可以连续键入Ctrl+D并最终返回到命令提示符,在提示符上方显示以下内容:

--Man-- next: bridge(8) [ view (return) | skip (Ctrl-D) | quit (Ctrl-C) ]
--Man-- next: lldptool-evb22(8) [ view (return) | skip (Ctrl-D) | quit (Ctrl-C) ]
--Man-- next: systemd.network(5) [ view (return) | skip (Ctrl-D) | quit (Ctrl-C) ]
--Man-- next: nm-settings(5) [ view (return) | skip (Ctrl-D) | quit (Ctrl-C) ]
--Man-- next: nm-settings-ifcfg-rh(5) [ view (return) | skip (Ctrl-D) | quit (Ctrl-C) ]
--Man-- next: systemd.directives(7) [ view (return) | skip (Ctrl-D) | quit (Ctrl-C) ]
Run Code Online (Sandbox Code Playgroud)

什么我问的是,是有可能得到的一个列表man pages,其中hairpin会出现如下面?:

man -<some-option> -K hairpin
nmcli(1)
bridge(8)
lldptool-evb22(8)
systemd.network(5)
nm-settings(5)
nm-settings-ifcfg-rh(5)
systemd.directives(7)
Run Code Online (Sandbox Code Playgroud)

编辑:
使用句子搜索 Google 并不总是返回解决特定查询的结果。这个问题显然就是这种情况,正如一些人指出的那样,它确实是重复的。

但是,最好不要删除它,因为它显示了在 Ubuntu 系统上返回的特定输出。Ubuntu 上的用户可能会从这个问题中受益。

编辑 2:现在
搜索skip (Ctrl-D)此问题出现在 Google 结果的第一页中,以前没有返回任何内容!

ter*_*don 6

您可以使用以下-w选项:

   -w, --where, --path, --location
          Don't actually display the manual pages, but do print the  loca?
          tion(s) of the source nroff files that would be formatted.
Run Code Online (Sandbox Code Playgroud)

这几乎返回了您要求的内容:

$ man -wK hairpin
/usr/share/man/man1/nmcli.1.gz
/usr/share/man/man8/ip-link.8.gz
/usr/share/man/man8/bridge.8.gz
/usr/share/man/man5/systemd.network.5.gz
/usr/share/man/man5/nm-settings.5.gz
/usr/share/man/man5/nm-settings-ifcfg-rh.5.gz
/usr/share/man/man7/systemd.directives.7.gz
Run Code Online (Sandbox Code Playgroud)

如果这还不够,您可以将其解析为形状:

$ man -wK hairpin | perl -pe 's#.*/([^/]+)\.(\d+)\.gz#$1($2)#'
nmcli(1)
ip-link(8)
bridge(8)
systemd.network(5)
nm-settings(5)
nm-settings-ifcfg-rh(5)
systemd.directives(7)
Run Code Online (Sandbox Code Playgroud)

最后,你可以把它变成一个函数。将此行添加到 shell 的初始化文件(~/.bashrc例如):

function sman(){ man -wK "$@" | perl -pe 's#.*/([^/]+)\.(\d+)\.gz#$1($2)#'; }
Run Code Online (Sandbox Code Playgroud)

然后,您可以运行:

$ sman hairpin
nmcli(1)
ip-link(8)
bridge(8)
systemd.network(5)
nm-settings(5)
nm-settings-ifcfg-rh(5)
systemd.directives(7)
Run Code Online (Sandbox Code Playgroud)