このページの本文へ

知っているとオペレーションが100倍便利になる各種のコマンドを覚えよう

覚えておきたい必須コマンド30―その2・便利なコマンド

2001年06月09日 13時58分更新

文● 中野 賢

  • この記事をはてなブックマークに追加
  • 本文印刷

テキストファイルに使われる漢字コードは、現在、EUC、シフトJIS、JISコードが代表的だ。ネットワークなどによって、異機種間でのファイルのやりとりが多くなると、すべてのファイルの漢字コードを統一するのは難しい。

lessやjvim、muleなどは、使われている漢字コードを自動的に認識し、変換して表示してくれる。しかし、すべてのプログラムがそうなっているわけではない。特に、sedやAWK、Perlなどでフィルタ処理するときには、漢字コードの違いによって、処理結果が異なってくるので注意が必要だ。

漢字コードの変換プログラムには、いくつかあるが、nkfコマンドがよく使われる。nkfが便利なのは、入力ファイルの漢字コードを自動認識してくれることだ。出力コードは、EUC(e)、シフトJIS(s)、JIS(j)を指定できる(かっこ内は指定するときのオプション)。たとえば、

USER$ nkf -e infile

とするとinfileの内容をEUCコードに変換して標準出力に出力する(画面に表示する)。

nkfは漢字コードは変換してくれるけれど、改行コードは変換してくれない。改行コードを変換する方法もいろいろあるが、今回はtrを使ってみよう。

USER$ nkf -s infile | tr \\n \\r

とすれば、UNIXの改行コード(\n)をMacintoshの改行コード(\r)に変換する。MS-DOSの改行コード(\r\n)に変換するには、

USER$ nkf -e infile | tr \\n \\r\\n

のようにする。バックスラッシュを重ねているのは、シェルに特殊文字だと解釈されないようにするためである。次のように引用符で囲んでもよい。

USER$ nkf -e infile | tr '\n' '\r\n'

なお、trコマンドの入力は標準入力だけである。したがって、nkfやcatを用いて、trにデータを渡すか、リダイレクトする必要がある。

Column コマンドラインでの一括処理

変換するファイルがいくつもあるときは、シェルの機能を使って、一気に変換すると便利だ。たとえば、bashの場合は、次のようにする。>のプロンプトはfor文の続きを入力するためのプロンプトである。

USER$ mkdir sjis
USER$ for f in *.doc ; do
> nkf -s $f > sjis/$f
> done

もし、カレントディレクトリにa.doc、b.doc、c.docというファイルがあれば、

nkf -s a.doc > sjis/a.doc
nkf -s b.doc > sjis/b.doc
nkf -s b.doc > sjis/c.doc

をしたことと同じになる。

週刊アスキー最新号

編集部のお勧め

ASCII倶楽部

ASCII.jp Focus

MITテクノロジーレビュー

  • 角川アスキー総合研究所
  • アスキーカード
ピックアップ

デジタル用語辞典

ASCII.jp RSS2.0 配信中