Date un'occhiata al funzionamento del comando col(1), che può filtrare le sequenze di backspace. Ma se proprio non volete perder tempo a leggere, ecco la soluzione nuda e cruda:
funnyprompt$ groff -t -e -mandoc -Tascii paginaman.1 | col -bx > paginaman.txt
Le opzioni -t e -e impongono a groff di effettuare l'elaborazione con tbl e eqn. Questa è una soluzione esagerata per le pagine di manuale che non necessitano di essere preprocessate, ma non fa alcun danno, tranne per qualche ciclo di CPU sprecato. D'altro canto, se non si usasse l'opzione -t nei casi in cui fosse necessaria, le tabelle verrebbero formattate in modo pessimo. Potreste anche trovare (o meglio: "indovinare") il comando necessario a formattare un dato documento groff (non è necessariamente una semplice pagina man) immettendo
funnyprompt$ grog /usr/man/man7/signal.7 groff -t -man /usr/man/man7/signal.7 |
"Grog" sta per "GROff Guess" e fa proprio quello che dice: guess (indovina). Se fosse perfetto, non dovremmo usare altre opzioni. Però ho notato che sbaglia a indovinare sia i pacchetti di macro sia i preprocessori. Ecco un mio piccolo script in Perl per eliminare intestazioni e piè di pagina; quando vorrete stampare le pagine man, questo script farà risparmiare a voi alcune pagine, e un albero a madre natura. Salvate lo script in un file chiamato strip-headers e dategli i permessi con chmod 755.
#!/usr/bin/perl -wn # elabora l'intero file tutto in una volta: undef $/; # cancella l'intestazione: s/^\n*.*\n+//; # cancella il pié di pagina: s/\n+.*\n+$/\n/g; # cancella l'interruzione di pagina: s/\n\n+[^ \t].*\n\n+(\S+).*\1\n\n+/\n/g; # riduce le righe vuote multiple ad una sola: s/\n{3,}/\n\n/g; # ecco quel che rimane... print; |
Questo script va usato come primo filtro dopo il comando man, in quanto fa affidamento sul numero di caratteri di fine riga (newline) emessi in output da groff. Per esempio:
funnyprompt$ man bash | strip-headers | col -bx > bash.txt