Como procurar um padrão contendo hífens dentro de páginas man?

10

Estou tentando encontrar um comando para procurar um padrão que contenha hifens dentro de todas as páginas do manual.

Eu olhei para man man e encontrei estas três opções:

-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.)

Eu tentei combiná-los para pesquisar o padrão mark-modified-lines , que é uma opção readline 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 opção --regex , que é descrita da seguinte forma:

--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.

Eu tentei usar essa opção e substituir a palavra mark-modified-lines pelo regex mark.modified.lines , em que os próprios hífens são substituídos pelo metacaractere . , que deve corresponder a qualquer caractere:

$ man -s1 -Kw --regex 'mark.modified.lines'

Ainda não imprime nenhuma página, embora eu saiba que o texto está escrito na página bash man.

O metacaractere . na expressão regular parece ser analisado como esperado, já que 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 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 man bash:

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

Enquanto esperava, já que contém esta linha:

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

É possível procurar por um padrão contendo hífens dentro das páginas man?

    
por user938271 22.10.2018 / 18:35

1 resposta

14

man -K pesquisa o código-fonte das páginas de manual, não o formulário renderizado (conforme exibido por man ). Hífens são codificados \- , então você precisa procurar por isso:

man -s1 -Kw 'mark\-mo'

Sim, isso é bastante obscuro. A página man man menciona, na descrição do -K opção, que

Note that this searches the sources of the manual pages, not the rendered text, and so may include false positives due to things like comments in source files. Searching the rendered text would be much slower.

mas o uso correto envolve conhecer a representação de origem do texto que você está pesquisando.

    
por 22.10.2018 / 18:44

Tags