I'm trying to find a command to search for a pattern containing hyphens inside all man pages.
I've looked at man man
, and found these 3 options:
-K
,--global-apropos
Search for text in all manual pages. This is a brute-force search, and is likely to take some time; if you can, you should specify a section to reduce the number of pages that need to be searched. Search terms may be simple strings (the default), or regular expressions if the
--regex
option is used.
-w
,--where
,--path
,--location
Don't actually display the manual pages, but do print the location(s) of the source nroff files that would be formatted.
-S list
,-s list
,t--sections=list
List is a colon- or comma-separated list of order specific manual sections to search. This option overrides the
$MANSECT
environment variable. (The-s
spelling is for compatibility with System V.)
I've tried to combine them to search for the pattern mark-modified-lines
which is a readline option described in man bash
:
$ man -s1 -Kw mark-modified-lines
But it doesn't find any page:
No manual entry for mark-modified-lines
And the command exits with the code 16
.
I thought that maybe the syntax of the command was wrong, but it doesn't seem so, since this command correctly finds the 5 man pages on my system which contains the word 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
I thought that maybe the hyphens in the word caused an issue.
In man bash
, I found the --regex
option which is described as follows:
--regex
Show all pages with any part of either their names or their descriptions matching each page argument as a regular expression, as with
apropos(1)
. Since there is usually no reasonable way to pick a "best" page when searching for a regular expression, this option implies-a
.
I tried to use this option and replace the word mark-modified-lines
with the regex mark.modified.lines
, where the hyphens are themselves replaced with the metacharacter .
which should match any character:
$ man -s1 -Kw --regex 'mark.modified.lines'
It still doesn't print any page, while I know that the text is written in the bash
man page.
The metacharacter .
in the regex seems to be parsed as expected, since this command:
$ man -s1 -Kw --regex 'mark.mo'
Prints:
/usr/share/man/man1/x11perfcomp.1.gz
/usr/share/man/man1/xditview.1.gz
And these 2 manpages (x11perfcomp
, xditview
) are both matched by the regex mark.mo
.
More specifically, man x11perfcomp
contains this line:
Mark Moraes wrote the original scripts to compare servers.
^^^^^^^
And man xditview
contains this line:
Mark Moraes (University of Toronto)
^^^^^^^
However, man -s1 -Kw --regex 'mark.mo'
doesn't print the bash man page:
/usr/share/man/man1/bash.1.gz
While I expected it would, since it contains this line:
mark-modified-lines (Off)
^^^^^^^
Is it possible to search for a pattern containing hyphens inside the man pages?