次のページ 前のページ 目次へ

10. ^H とか ^_ などのない man page のテキストはどうすれば得られるか?

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


次のページ 前のページ 目次へ