如何搜索手册页中包含连字符的模式?


11

我试图找到一个命令来搜索所有手册页中包含连字符的模式。

我查看了man man,发现了以下3个选项:

-K--global-apropos

在所有手册页中搜索文本。这是蛮力搜索,可能需要一些时间。如果可以的话,应指定一个区域以减少需要搜索的页面数。搜索词可以是简单的字符串(默认值),也--regex可以是正则表达式(如果使用了该选项)。

-w--where--path--location

实际上不显示手册页,而是打印将要格式化的源nroff文件的位置。

-S list-s listt--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-linesregex 替换单词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

而这两个手册页(x11perfcompxditview)都由正则表达式匹配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)
^^^^^^^

是否可以在手册页中搜索包含连字符的模式?

Answers:


15

man -K搜索手册页的源代码,而不是其呈现的形式(由显示man)。连字符已编码\-,因此您需要搜索:

man -s1 -Kw 'mark\-mo'

是的,这很模糊。man手册页提到,在的描述-K选项,

请注意,这会搜索手册页的源代码,而不是渲染的文本,因此可能会由于源文件中的注释等内容而导致误报。搜索渲染的文本会慢得多。

但是正确使用此方法需要知道您要搜索的文本的原始表示形式。


1
朦胧?是。另外,这是一个错误。
kubanczyk

@kubanczyk很好,它符合规范,但是是的,我同意该规范是越野车;-)。
史蒂芬·基特
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.