Page suivante - Page précédente - Table des matières

10. Comment puis-je avoir un texte en pur ASCII sans tous ces fichus ^H^ de contrôle ?

Jetez un oeuil à la commande col(1), col peut enlever ces caractères d'effacement. Pour les impatients, voici la commande :

$ groff -t -e -mandoc -Tascii manpage.1 | col -bx> manpage.txt
Les options -t et -e disent à groff d'utiliser les préprocesseurs tbl et eqn. C'est inutile pour les pages de manuel ne nécessitant pas de préprocesseur mais cela ne gêne pas, si ce n'est une surcharge du processeur. D'un autre côté, ne pas utiliser -t alors qu'il est nécessaire fera que les tableaux seront très mal formatés. Vous pourrez même trouver ("deviner" serait un terme plus exact) la commande nécessaire pour traiter tel ou tel document groff (pas uniquement des pages de manuel) par le biais de grog :
$ grog /usr/man/man7/signal.7
groff -t -man /usr/man/man7/signal.7

En fait, grog signifie "GROff Guess", et cet outil fait bien ce qu'il dit (en anglais, guess = deviner...) : il tente de deviner la commande nécessaire pour formater un document groff en fonction de son contenu. S'il était parfait, nous n'aurions jamais plus besoin d'options. Mais s'il arrive qu'il détermine un mauvais jeu de macros, je ne l'ai par contre jamais vu se tromper sur les préprocesseurs à employer.

Voici un petit script Perl réalisé par l'auteur de ce document, qui peut supprimer les en-têtes et les pieds de page, ce qui permet de gagner quelques longueurs de papier lorsque l'on imprime de longues et complexes pages de manuel. Sauvez-le dans un fichier nommé strip-header et mettez-le en mode 755.

#!/usr/bin/perl -n
#  pour qu'il avale tout le fichier en une seule fois:
undef $/;
#  on enleve les sauts de page:
s/\n{4}\S.{50,}\n{6}\S.{50,}\n{3}/\n/g;
#  le premier en-tete et le dernier pied de page:
s/\n\S.{50,}\n//g;
#  transorme deux ou plus lignes vides consecutives en une seule:
s/\n{3,}/\n\n/g;
#  et voila ce qui reste...
print;

Il faut appeler ce programme en tant que premier filtre après la comande man, car il se base sur le nombre de sauts de ligne issus de groff. Par exemple :

$ man bash | strip-headers | col -bx> bash.txt


Page suivante - Page précédente - Table des matières