Q. man の文書をテキスト化するにはどのようにすれば良いのでしょうか。
A. 単純に
% man man > man.txt
として plain text ファイルを作成すると、cat や more、less などで
見る分にはよいのですが、vi や emacs などのエディタで見ようとすると
LS(1) FreeBSD General Commands Manual LS(1)
N^HNA^HAM^HME^HE
l^Hls^Hs - list directory contents
S^HSY^HYN^HNO^HOP^HPS^HSI^HIS^HS
のように、太字や下線の部分がおかしくなってしまいます。これは
NAME の太字を表現するのに、
N(^Hで一文字戻る)NA(^Hで一文字戻る)AM(^Hで一文字戻る)ME(^Hで一文字戻る)E
のように、コントロールコード ^H を使っているからです。同様に
下線付きの `ABC' は A^H_B^H_C^H_ となります。
これを plain text にするには、以下のような方法があります。
(1) colcrt(1) を使用する
% man man | colcrt > man.txt
これが一番簡単でしょう。
% jman jman | colcrt > jman.txt
jman も OK です。
(2) col(1) を使用する。
% man man | col -b > man.txt
man ならよいのですが、日本語に対応していないため、jman では
うまくいきません。
FreeBSD(98) の col は、3.5.1 以前は日本語が通るようにパッチがあてられて
いましたが、4.0 以降は日本語化パッチが配布物の中に含まれています。
<URL:http://www.jp.freebsd.org/pc98/releases/4.0R/Relnot98.txt>
(3) colcrt や col の行なっていることを sed や perl で行なうと
% jman jman | sed 's/.^H//g; s/.^H//g' > man.txt
% jman jman | perl -pe 's/..\x08\x08|.\x08//g' > man.txt
のようになります。なお、^H は Ctrl-v BackSpace や Ctrl-v h として
入力します。
(4) emacs (mule) 上で man を見て、ファイルに保存する。
M-x man [ENTER] マニュアル名 [ENTER]
とすると、emacs 上にマニュアルが表示されます。それをファイル名を
指定して書き出せばいいでしょう。~/.emacs に
(defvar manual-program "jman")
としておくと、日本語マニュアルが表示されます。
おまけ。
(5) plain text ではありませんが、
% gzcat /usr/share/man/man1/ls.1.gz | groff -man > ls.ps
とすると、マニュアルを Postscript 形式に変換できます。日本語マニュアルは
ja-groff (/usr/local/bin/groff にインストールされる) を使って
% gzcat /usr/share/man/man1/ls.1.gz | /usr/local/bin/groff -man > ls.ps
とします。そのまま Postscript プリンタに出力したり、gs コマンド
(ghostscript に含まれています) で見ることができます。
グループ名: man