我试图找到一个命令来搜索所有手册页中包含连字符的模式。
我查看了man man
,发现了以下3个选项:
-K
,--global-apropos
在所有手册页中搜索文本。这是蛮力搜索,可能需要一些时间。如果可以的话,应指定一个区域以减少需要搜索的页面数。搜索词可以是简单的字符串(默认值),也
--regex
可以是正则表达式(如果使用了该选项)。
-w
,--where
,--path
,--location
实际上不显示手册页,而是打印将要格式化的源nroff文件的位置。
-S list
,-s list
,t--sections=list
列表是要搜索的特定于订单的手册部分的冒号或逗号分隔列表。此选项将覆盖
$MANSECT
环境变量。(-s
拼写是为了与System V兼容。)
我试图结合它们来搜索模式mark-modified-lines
,这是在man bash
以下内容中描述的readline选项:
$ man -s1 -Kw mark-modified-lines
但是找不到任何页面:
No manual entry for mark-modified-lines
然后命令退出并显示代码16
。
我以为该命令的语法可能是错误的,但似乎并非如此,因为此命令可以在我的系统上正确找到包含单词的5个手册页guitar
:
$ man -s1 -Kw guitar
/usr/share/man/man1/ffmpeg-all.1.gz
/usr/share/man/man1/ffserver-all.1.gz
/usr/share/man/man1/ffplay-all.1.gz
/usr/share/man/man1/ffmpeg-filters.1.gz
/usr/share/man/man1/ffprobe-all.1.gz
我认为也许单词中的连字符引起了问题。在中man bash
,我找到了--regex
描述如下的选项:
--regex
使用正则表达式显示所有页面,这些页面的名称或描述的任何部分均与每个页面参数匹配,作为正则表达式
apropos(1)
。由于在搜索正则表达式时通常没有合理的方法来选择“最佳”页面,因此此选项暗含-a
。
我尝试使用此选项,并用mark-modified-lines
regex 替换单词mark.modified.lines
,其中连字符本身被.
应与任何字符匹配的元字符替换:
$ man -s1 -Kw --regex 'mark.modified.lines'
虽然我知道文本是写在bash
手册页中的,但它仍然不会打印任何页面。
.
正则表达式中的元字符似乎已按预期方式解析,因为此命令:
$ man -s1 -Kw --regex 'mark.mo'
印刷品:
/usr/share/man/man1/x11perfcomp.1.gz
/usr/share/man/man1/xditview.1.gz
而这两个手册页(x11perfcomp
,xditview
)都由正则表达式匹配mark.mo
。更具体地说,man x11perfcomp
包含以下行:
Mark Moraes wrote the original scripts to compare servers.
^^^^^^^
并man xditview
包含以下行:
Mark Moraes (University of Toronto)
^^^^^^^
但是,man -s1 -Kw --regex 'mark.mo'
不打印bash手册页:
/usr/share/man/man1/bash.1.gz
尽管我期望如此,但因为它包含以下行:
mark-modified-lines (Off)
^^^^^^^
是否可以在手册页中搜索包含连字符的模式?