Estou tentando encontrar um comando para procurar um padrão contendo hífens dentro de todas as páginas man.
Pesquisei man man
e encontrei essas 3 opções:
-K
,--global-apropos
Procure texto em todas as páginas do manual. Esta é uma busca de força bruta e provavelmente levará algum tempo; se puder, especifique uma seção para reduzir o número de páginas que precisam ser pesquisadas. Os termos de pesquisa podem ser strings simples (o padrão) ou expressões regulares se a
--regex
opção for usada.
-w
,--where
,--path
,--location
Na verdade, não exiba as páginas de manual, mas imprima os locais dos arquivos nroff de origem que seriam formatados.
-S list
,-s list
,t--sections=list
Lista é uma lista separada por dois pontos ou vírgulas de seções manuais específicas de pedidos a serem pesquisadas. Esta opção substitui a
$MANSECT
variável de ambiente. (A-s
ortografia é para compatibilidade com o System V.)
Eu tentei combiná-los para procurar o padrão mark-modified-lines
que é uma opção de linha de leitura descrita em man bash
:
$ man -s1 -Kw mark-modified-lines
Mas não encontra nenhuma página:
No manual entry for mark-modified-lines
E o comando sai com o código 16
.
Eu pensei que talvez a sintaxe do comando estivesse errada, mas não parece, já que este comando encontra corretamente as 5 páginas man no meu sistema que contém a palavra 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
Eu pensei que talvez os hífens na palavra causassem um problema. Em man bash
, encontrei a --regex
opção descrita a seguir:
--regex
Mostre todas as páginas com qualquer parte de seus nomes ou descrições que correspondam a cada argumento de página como uma expressão regular, como em
apropos(1)
. Como geralmente não há uma maneira razoável de escolher uma "melhor" página ao pesquisar uma expressão regular, essa opção implica-a
.
Tentei usar esta opção e substituir a palavra mark-modified-lines
pelo regex mark.modified.lines
, onde os próprios hífens são substituídos pelo metacaractere .
que deve corresponder a qualquer caractere:
$ man -s1 -Kw --regex 'mark.modified.lines'
Ele ainda não imprime nenhuma página, embora eu saiba que o texto está escrito na bash
página man.
O metacaractere .
no regex parece ser analisado conforme o esperado, pois este comando:
$ man -s1 -Kw --regex 'mark.mo'
Impressões:
/usr/share/man/man1/x11perfcomp.1.gz
/usr/share/man/man1/xditview.1.gz
E essas 2 manpages ( x11perfcomp
, xditview
) são correspondidas pela regex mark.mo
. Mais especificamente, man x11perfcomp
contém esta linha:
Mark Moraes wrote the original scripts to compare servers.
^^^^^^^
E man xditview
contém esta linha:
Mark Moraes (University of Toronto)
^^^^^^^
No entanto, man -s1 -Kw --regex 'mark.mo'
não imprime a página de manual do bash:
/usr/share/man/man1/bash.1.gz
Enquanto eu esperava que sim, pois contém esta linha:
mark-modified-lines (Off)
^^^^^^^
É possível procurar um padrão contendo hífens dentro das páginas man?
man -K
pesquisa o código-fonte das páginas de manual, não sua forma renderizada (como exibido porman
). Os hífens são codificados\-
, então você precisa procurar por isso:Sim, isso é bastante obscuro. A
man
página man menciona, na descrição da-K
opção, quemas usar isso corretamente envolve conhecer a representação de origem do texto que você está procurando.