manコマンドの出力をファイルにリダイレクトすると制御文字や重ね打ち文字でごちゃっとしてしまう。


$ man who > who.txt

man who > who.txt

col コマンドや colcrt コマンドを通すとこれらの不要な文字を消すことができる。手元の MacBook Air with Mac OS X Lion には colcrt がインストールされてたのでこれでやってみた。

普通に colcrt を通して実行すると、


$ man who | colcrt > who_colcrt.txt

アンダーラインが付いている文字の場合、次の行にハイフン「-」が入ってしまう。


$ head ./who_colcrt.txt
 
WHO(1)                    BSD General Commands Manual                   WHO(1)
 
NAME
     who -- display who is logged in
 
SYNOPSIS
     who [-abdHlmpqrsTtu] [file]
                           ----
     who am i

colcrt にオプションのハイフン「-」をつけると、この下線の代わりのハイフンを削除することができる。


$ man who | colcrt - > who_colcrt-.txt

$ head ./who_colcrt-.txt
 
WHO(1)                    BSD General Commands Manual                   WHO(1)
 
NAME
     who -- display who is logged in
 
SYNOPSIS
     who [-abdHlmpqrsTtu] [file]
     who am i
colcrt - nroff の出力を CRT で表示するためのフィルタ
(中略)
colcrt は、半改行、逆改行の能力を持たず、重ね打ちで表示が壊れる端末に、仮想的にその機能を提供します。半改行文字と下線(ダッシュ`-' に置換されます)は、通常の出力行の間に新しい行をもうけて出力されます。

Manpage of COLCRT

重ね打ちはタイプライターとかそういう時代の名残?

読み方:かさねうち
別名:重ね印字
【英】overprint, overstrike

重ね打ちとは、印刷する際に、文字を同じ位置に重ねて印字することである。特定の位置に記号(平方根など)をつける場合や、文字を太字にしたり、あるいは合成文字を印刷したりする場合に用いられる。

重ね打ちには、文字単位で行う(次の文字を直前に印刷した文字に重ねて印刷する)方式の他に、行単位で行う(次の行全体を、改行せずに重ねて印刷する)方式がある。このうち、行単位で行う方式が特にゼロ改行と呼ばれる。

重ね打ちとは 「重ね印字」 (overprint, overstrike) かさねうち: - IT用語辞典バイナリ

ちなみに環境。


$ uname -mrsv
Darwin 11.0.1 Darwin Kernel Version 11.0.1: Wed Jun 29 19:53:22 PDT 2011; root:xnu-1699.23.2~1/RELEASE_X86_64 x86_64

tags: unix

Posted by NI-Lab. (@nilab)