Quero usar man
com mais eficiência. Eu decidi tentar --regex
a opção. No entanto:
~$ man --regex -K '.*textdomain.*perl.*'
--Man-- next: Locale::Messages(3pm) [ view (return) | skip (Ctrl-D) | quit (Ctrl-C) ]
^C
~$ man --regex -K '.*perl.*textdomain.*'
No manual entry for .*perl.*textdomain.*
A fonte (para primeiro descobrir qual man abre) que extraí produz resultados grep vazios em ambos os sentidos, mas encontra palavras (textdomain, perl) separadamente:
~/Documents$ grep '.*textdomain.*perl.*' Locale\:\:libintlFAQ.3pm
~/Documents$ grep '.*perl.*textdomain.*' Locale\:\:libintlFAQ.3pm
No arquivo existe perl
(por exemplo, linha 74) antes textdomain
(por exemplo, linha 120). Por que man --regex -K '.*perl.*textdomain.*'
não consigo encontrá-lo quando a ordem inversa das palavras o faz? grep
mostra que nenhuma das sequências está em uma linha. Como realmente man --regex -K
funciona? Deveria .*
encontrar novas linhas ou não? Acho que a última resposta é "depende do sistema" (com base em https://stackoverflow.com/questions/11924480/search-in-man-page-for-words-at-the-beginning-of- linha ).
Na
man
implementaçãoman-db
encontrada na maioria das distribuições GNU/Linux, a pesquisa é baseada em linhas e não diferencia maiúsculas de minúsculas por padrão (a menos que você passe a opção-I
/--match-case
).Para procurar páginas de manual que contenham ambos
perl
etextdomain
diferenciando maiúsculas de minúsculas, você poderia fazer (em um sistema GNU):perl
é pesquisado comman -IKw
o qual retorna os caminhos das páginas de manual que o contêm,textdomain
é pesquisado nesses arquivos comzgrep
e a lista de caminhos resultante é fornecida paraman -l
.Um
man-pages-with-all-words
script pode ser escrito como:Ou o mesmo com
sh
a sintaxe POSIX: