col(1) を見よう。col はバックスペースシーケンスを取り除ける。それも面 倒と言うのなら、次の様にタイプしよう。
funnyprompt% groff -t -e -mandoc -Tascii manpage.1 | col -bx \
> manpage.txt
-t と -e のスイッチは、groff に tbl と eqn を使っての前処理を指定する。 前処理を必要としない man page にとっては、過剰な指定だけれども、数 CPU サイクルの無駄にしかならない。反対に、必要な時に -t のスイッチを指定し ないと、表がめちゃくちゃにフォーマットされてしまい、有害である。Man page に限らず、groff のドキュメントをフォーマットするために必要なコマ ンドについては、次の様にタイプすれば、わかるだろう(grog コマンドを使 うから、"見当をつける" ことができるのほうがいいかな)。
funnyprompt% grog /usr/man/man7/signal.7
groff -t -man /usr/man/man7/signal.7
"Grog" は、"GROff Guess" から来ており、その名の通り見当をつけることを する。Grog が完全だったならば、その出力以上のオプションは必要ないんだけ ど。私の経験では、grog は、マクロパッケージについては、間違うが、プリ プロセッサについては正しかった。
以下は、私が書いた簡単な perl のスクリプトで、ページヘッダとフッタを削 除できる。これを使えば、長くて詳細な man page を印刷する時に、数ページ は、得することができる。"strip-header" という名でファイルに保存して "chmod 755" として欲しい。
#!/usr/bin/perl -n # 一度にファイル全体を読み込んで: undef $/; # ページ区切りを削除し: s/\n{4}\S.{50,}\n{6}\S.{50,}\n{3}/\n/g; # 最初のヘッダと最後のフッタを削除し: s/\n\S.{50,}\n//g; # 2行以上の空行を1行にまとめて: s/\n{3,}/\n\n/g; # できあがり... print;
次のように、`man' コマンドの次の最初のフィルタとして使うこと。Groff に よって出力される改行の数に、処理が依存しているから。
funnyprompt% man bash | strip-headers | col -bx > bash.txt