Como despejar uma página de manual?

46

Como posso "gato" uma página de manual como eu "gato" um arquivo para obter apenas uma cópia do conteúdo?

LanceBaynes
fonte

Respostas:

41

Primeiro, os arquivos man geralmente são apenas arquivos de texto compactados em gzip em algum lugar do seu sistema de arquivos. Como sua milhagem variará ao encontrá-los e você provavelmente desejou a versão processada e formatada que o homem fornece a você, em vez da fonte, basta despejá-las com a manferramenta. Observando man man, vejo que você pode alterar o programa usado para visualizar as páginas de manual com o -Psinalizador como este:

man -P cat command_name

Também não vale nada que mandetecte automaticamente quando você canaliza a saída em vez de visualizá-la na tela; portanto, se você for processá-la com outra coisa, poderá pular diretamente para essa etapa da seguinte forma:

man command_name | grep search_string

ou despejar para um arquivo:

man command_name > formatted_man_page.txt
Caleb
fonte
1
usar -P não torna o arquivo de saída perfeitamente legível. Está rabiscado com todos os caracteres ctrl-H. Eu costumava fazer man cmd>! man.cmd e abra o man.cmd e faça '% s / ^ H .// g' para remover os caracteres de controle irritantes por representar negrito e itálico. Mas isso ainda tem algum problema quando existem outros caracteres especiais. Ainda estou procurando um bom método para evitar a edição manual na saída.
Chan Kim
@ChanKim Você está fazendo algo errado ou tem alguma configuração não padrão em seu caminho, porque os dois métodos aqui produzem de fato uma saída limpa, formatada em texto sem formatação, sem caracteres extras de controle. Você tem certeza de que não possui um manalias para algo ou sinalizadores forçados no seu shell que estão separando o seu da função normal man?
Caleb
1
@ Caleb, confirmo o problema do OP. Versão 6.7 (Final) do CentOS, / usr / bin / man gcc> j, edite 'j', todos os ctrl-H's estão lá. A melhor resposta que encontrei está em commandlinefu.com/commands/view/2417/…
Charles Roth
1
man command_name > formatted_man_page.txtfará com que algumas palavras sejam duplicadas.
Zigii Wong
52

Para obter um arquivo de página do manual ASCII, sem as tentativas irritantes de backspace / underscore de sublinhar e sequências estranhas para fazer negrito:

man ksh | col -b > ksh.txt
Bruce Ediger
fonte
6
Você merece mais votos positivos
Labo
2
Olá, por que a saída canalizada do homem contém caracteres duplicados? e Como o col-b remove o seu? Desde já, obrigado.
Saurabheights
2
@saurabheights - o man tenta fazer sublinhados e texto em negrito e talvez outras coisas com backspaces, caracteres duplicados, seqüências de escape, etc. etc. como texto em um terminal. Eu não li a fonte col, mas provavelmente apenas examina stdin byte a byte e não passa backspaces, etc. para stdout. A página de manual de col diz como alguém escreveu especificamente para filtrar a saída de man.
Bruce Ediger
1
ok, isso faz sentido. Esses caracteres (ocultos) podem causar caracteres duplicados. Obrigado Bruce.
Saurabheights
Você realmente merece votos de modo. "Col" para coluna?
Álgebra
24

As páginas de manual geralmente são troffarquivos pré-processados ​​e você pode acessar o texto sem formatação com,

groff -t -e -mandoc -Tascii manpage.1 | col -bx > manpage.txt

groffé um invólucro para troff.

Mais informações aqui .

Pode ser necessário usar o gzip para descompactar os arquivos da página de manual primeiro, e você ainda terá muitas informações de formatação na saída.

EightBitTony
fonte
4
+1 para falar sobre groff / troff ea formatação de páginas man
lgeorget
11

Eu faço isso toda hora. Esta linha de comando me faz feliz:

man man | col -bx > man.txt

col -b remove os backspaces.

col -bx também substitui as guias por espaços, que é minha forte preferência.

Se quiser que o texto seja formatado com uma largura de minha preferência durante a leitura, altero o comando para este:

MANWIDTH=10000 man man | col -bx > man.txt
sotosoc
fonte
man man | col -bx > man.txttrabalhou para mim. Obrigado.
JaredH
6

Basta usar o mancomando - você pode canalizar a saída para outras coisas da mesma maneira que catpara um arquivo.

TomH
fonte
1
Eu gosto da simplicidade.
Joel Sjögren
3

Se você quiser apenas catuma página de manual, basta direcioná-la para cat:

man ls | cat

Se você deseja despejar seu conteúdo em um arquivo:

man ls > ls_manpage_dump.txt
Sheharyar
fonte