Linuxコマンド辞典 nkfコマンド(テキスト処理)

ファイルの文字コードを変換で広く使われている「nkf」コマンドの概要と使い方を記載しています。

RHEL Fedora CentOS Vine Deblan Plamo

概要・使用方法

指定したファイルを標準入力から読み取り、文字コードを変換して標準出力から出力します。文字コード変換のために入力の文字コードを自動認識する機能を持っています。

JISコード(ISO-2022-JP)、Shift-JIS、日本語EUC、UTF-8とUTF-16を自動判別できます。出力指定がない場合は、デフォルトでJIS(ISO-2022-JP)を出力します。特に指定しない場合は標準入力と標準出力を利用します。

UTF-8/UTF-16では、BOM(Byte Order Mark、バイト順マーク)を明示的に付けるオプションがあります。BOMとは符号化形式を示すために先頭につけるバイナリデータのことで、UTF-8では3Byte、UTF-16では2byte使われます。ツールによってはBOMがついてないと、UTF-8/UTF-16として利用できないものがあります。

nkfコマンドは、インストールされていないことが多いので、yum install nkfでインストールしましょう。

書式

$ nkf [オプション] [入力ファイル名]

オプション

-g
–guess
入力自動判別結果を出力
-jJIS文字コードを出力(デフォルト)
-eEUC文字コードで出力
-sShift-JIS文字コードで出力
-w、-w8UTF-8文字コードで出力
-w16UTF-16文字コードで出力
-oc=文字コード出力文字コードを指定する
-rROT13/47暗号(文字列をすべて13,47ずらすシーザー暗号の一種)を利用する
-mQMIME Quotedでエンコードされた入力をデコードする
-mBMIME Base64でエンコードされた入力をデコードする
-m0MIMEをデコードしない
-MMIMEに変換する
-MBMIME Basse64にエンコードする
-x半角かな(JIS X 0201片仮名)を全角かな(JIS X 0208)へ変換しない
-X半角かな(JIS X 0201片仮名)を全角かな(JIS X 0208)へ変換しない
-J入力文字コードをISO-2022-JPと仮定する
-E入力文字コードをEUC-JPと仮定する
-S入力文字コードをShift-JISと仮定する
-W、-W8入力文字コードをUTF-8と仮定する
-W16入力文字コードをUTF-16と仮定する
-ic=文字コード入力文字コードを指定する
-B入力コードをESCの無くなった壊れたISO-2022-JPと仮定する
-Lw改行コードをCR+LF(Windows改行コード)に変換する
-Lm改行コードをCR(Mac改行コード)に変換する
-Lu改行コードをLF(UNIX改行コード)に変換する

文字コードを調べる

-gオプションを使用することで、ファイルの文字コードを調べることができます。

$ nkf -g ファイル名

実行結果

[suna@engraku work]$ nkf -g shift-jis.txt 
Shift_JIS
[suna@engraku work]$ 

文字コードを変換する

Shift-JISからUTF-8に変換します。

$ nkf -w 変換元ファイル > 出力ファイル

実行結果

[suna@engraku work]$ cat shift-jis.txt 
abcdefg

[suna@engraku work]$ nkf -w shift-jis.txt > utf8.txt
[suna@engraku work]$ cat utf8.txt 
abcdefg
あいうえお
[suna@engraku work]$ 

文字コードと改行コードを変換する

Shift-JISからUTF-8に変換します。また、改行コードをCR+LFからLFに変換します。

$ nkf -w -Lu 変換元ファイル > 出力ファイル

実行結果

[suna@engraku work]$ nkf -w -Lu shift-jis.txt > utf8.txt
[suna@engraku work]$ cat utf8.txt 
abcdefg
あいうえお
[suna@engraku work]$