Linux コマンド辞典「col」
col : 入力中にある逆改行コードを処理するフィルタ
2014/09/12 : Linux / CentOS6
Linux を使っていると、man によるコマンドの説明をテキスト化したくなることがあります。
安易にリダイレクトすればいいんじゃね?と考えて、
man hoge > hoge.txt
とやってエディタで開いてみると・・・強調表示のための制御コードが入ってて解読不能 orz。
世の中、そこまでは甘くありませんでした。
この強調表示のための制御コードの正体は、どうも「Back Space(^H)」っぽい。
「BS : 0x08」だけをバイナリエディタで取り除いてみても解決しなかったので、いろいろ調べたところ、ありました、見つけました。
それが「col コマンド」。
これを使うと、man ページのリダイレクトから忌まわしい制御コードを取り除いてくれます。
man hoge | col -b > hoge.txt
大成功。まさにこのために作られたようなコマンドです。
プログラマは一般にその習性として、「こんなのあったら便利だな」と考えてプログラムを作りますが、それが往々にして「車輪の再発明」をひきおこします。
「車輪の再発明」の全てを否定するわけではありませんが、プログラミングを始める前に「既にあるんじゃないか?」と考えて、探すための少しの時間を惜しまなければ、発見の暁には時間の節約になって生産性の向上にもつながります。
車輪の再発明
「広く受け入れられ確立されている技術や解決法を知らずに(または意図的に無視して)、同様のものを再び一から作ること」
( wikipedia より引用 )
Linux のコマンドを全て知ってる人は、ほとんどいないと思います。
あまりメジャーではないけれど、知っていれば「車輪の再発明」をしなくて済む便利なコマンドを今後も紹介したいと思います。
※以下に「man col」の内容を引用します。
名前
col - 入力中にある逆改行コードを処理するフィルタ
書式
col [-bfpx] [-l num]
説明
col は、逆方向への改行および半改行を取り除き、通常の改行方向だけで出力可能なものに変換する。
同時に、可能な限り空白文字部分をタブに置き換える処理をする。
これは、nroff(1) や tbl(1) の出力を処理するのに役立つ。
col は、データを標準入力から読み込み、標準出力に書き出す。
オプションとしては以下のものがある:
-b バックスペースを出力しないようにする。 (訳註: 同じ箇所に複数の文字が書かれる場合は) 行中のその箇所に最後に書かれた文字だけを表示する。
-f 半改行を含めることを許可する (‘‘fine’’ モード)。通常、行と行の境界に表示されることになる文字は、次の行に表示される。
-p 不明なコントロール文字を変更せずに表示する。通常 col は、以下に挙げるような認識・解釈できるコントロール文字でなければ、その文字を入力から取り除く。
-x タブのかわりに複数個の空白文字を出力する。
-lnum メモリ上に、少なくとも num 行分をバッファする。デフォルトでは 128 行分がバッファされる。
col が認識する復帰動作のためのコントロール文字と、その文字の 10 進数での値を以下の表に示す:
ESC-7 |
逆方向に改行する (エスケープの後に 7) |
ESC-8 |
逆方向に半改行する (エスケープの後に 8) |
ESC-9 |
通常方向に半改行する (エスケープの後に 9) |
backspace |
逆方向に 1 カラム分戻す (8)。最初のカラムでは無視される |
carriage return |
行頭に復帰する (13) |
newline |
通常方向に改行する (10)。行頭への復帰も行う |
shift in |
通常の文字セットを選択する (15) |
shift out |
特別な文字セットを選択する (14) |
space |
通常方向に 1 カラム分に移動する (32) |
tab |
次のタブ位置へ移動する (9) |
vertical tab |
逆方向に改行する (11) |
col が認識できないコントロール文字およびエスケープシーケンスは削除される。
col は文字列を読み込みながら追って行き、出力する際に正しいかを確認する。
すでに出力してしまった行を超えて戻るような逆改行の処理が入った場合、 colは警告メッセージを表示する。
関連項目
expand(1), nroff(1), tbl(1)
準拠
col ユーティリティは Single UNIX Specification, Version 2 に従う。
-l オプションは、この規格を拡張したものである。
履歴
col コマンドは Version 6 AT&T UNIX から登場した。
記述に際しては、細心の注意をしたつもりですが、間違いやご指摘がありましたら、こちらからお知らせいただけると幸いです。
→「Linux コマンド辞典「uniq」」
« 戻る