Como pesquisar um padrão contendo hífens nas páginas do manual?

11

Estou tentando encontrar um comando para procurar um padrão que contenha hífens em todas as páginas de manual.

Eu olhei man mane encontrei estas 3 opções:

-K, --global-apropos

Procure texto em todas as páginas de manual. Essa é uma busca por força bruta e provavelmente levará algum tempo; se puder, você deve especificar uma seção para reduzir o número de páginas que precisam ser pesquisadas. Os termos de pesquisa podem ser cadeias simples (o padrão) ou expressões regulares, se a --regexopçã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 vírgula ou vírgula de seções manuais específicas do pedido a serem pesquisadas. Esta opção substitui a $MANSECTvariável de ambiente. (A -sortografia é para compatibilidade com o sistema V.)

Tentei combiná-los para procurar o padrão, mark-modified-linesque é 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, pois esse comando encontra corretamente as 5 páginas de manual 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 --regexopção descrita da seguinte maneira:

--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 página "melhor" ao procurar uma expressão regular, essa opção implica -a.

Tentei usar essa opção e substituir a palavra mark-modified-linespelo regex mark.modified.lines, onde os 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, enquanto eu sei que o texto está escrito na bashpágina de manual.

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 duas páginas de manual ( x11perfcomp, xditview) são correspondidas pelo regex mark.mo. Mais especificamente, man x11perfcompcontém esta linha:

Mark Moraes wrote the original scripts to compare servers.
^^^^^^^

E man xditviewcontém esta linha:

    Mark Moraes (University of Toronto)
    ^^^^^^^

No entanto, man -s1 -Kw --regex 'mark.mo'não imprime a página do manual do bash:

/usr/share/man/man1/bash.1.gz

Enquanto eu esperava que sim, uma vez que contém esta linha:

mark-modified-lines (Off)
^^^^^^^

É possível procurar um padrão contendo hífens nas páginas do manual?

user938271
fonte

Respostas:

15

man -Kpesquisa o código fonte das páginas de manual, não sua forma renderizada (como exibido por man). Os hífens são codificados \-, então você precisa procurar por isso:

man -s1 -Kw 'mark\-mo'

Sim, isso é bastante obscuro. A manpágina de manual menciona, na descrição da -Kopção, que

Observe que isso pesquisa as fontes das páginas de manual, não o texto renderizado e, portanto, pode incluir falsos positivos devido a coisas como comentários nos arquivos de origem. Pesquisando o texto renderizado seria muito mais lento.

mas usá-lo corretamente envolve conhecer a representação de origem do texto que você está procurando.

Stephen Kitt
fonte
1
Obscurecer? Sim. Além disso, é um bug.
Kubanczyk # 22/18
@kubanczyk bem, ele corresponde às especificações, mas sim, eu concordo que a especificação é de buggy ;-).
Stephen Kitt