【Linuxコマンド】nkf コマンドの使い方とよく使うオプション

概要

 
nkf コマンドは、日本語テキストの文字コードや改行コードを変換するためのコマンドです。
名前は「Network Kanji Filter」の略で、ISO-2022-JP、Shift_JIS、EUC-JP、UTF-8 などの間で文字コードを変換できます。
さらに、入力の文字コードを自動判別したり、全角・半角の変換改行コードの変換も行うことができます。
 

Windows から渡された Shift_JIS のファイルを UTF-8 に変換したいときや、
LF と CRLF が混ざったテキストを揃えたいときなど、日本語環境では出番の多いコマンドです。
多くのディストリビューションでは別途 nkf パッケージのインストールが必要になります。
 

フォーマット

 

nkf [オプション] [ファイル名 ...]

 

標準入力から読み込んで標準出力に書き出すフィルタ型のコマンドで、
ファイル名を指定した場合は、そのファイルを読み込んで変換結果を標準出力に出力します。
--overwrite オプションを付けると、変換結果で元ファイルを上書きすることもできます。

文字コード変換と改行コード変換、全角・半角変換などを、オプションの組み合わせで一度に行えるのが特徴です。

 

よく使うコマンド例

 

・ファイルの文字コードを判別する

nkf -g sample.txt

-g--guess)は、ファイルの文字コードと改行コードを推測して表示します。
例:Shift_JIS (LF) などと表示されるので、「今どの文字コードなのか」を確認したいときに便利です。

 

・Shift_JIS を UTF-8 に変換する(別ファイルに出力)

nkf -w input_sjis.txt > output_utf8.txt

-w は UTF-8 で出力する指定です。
この例では、Shift_JIS の input_sjis.txt を読み込み、output_utf8.txt に UTF-8 で書き出します。
元ファイルは変更されません。

 

・Shift_JIS を UTF-8 に変換して同じファイル名で上書きする

nkf -w --overwrite index.html

–overwrite を付けると、変換結果で元ファイルをそのまま上書きします。
「このファイルはもう UTF-8 に統一してしまいたい」というときに便利ですが、
誤変換があった場合に戻しづらいので、事前にバックアップを取っておくのがおすすめです。

 

・Linux/UNIX 用に改行コードを LF に揃える

nkf -Lu --overwrite script.sh

-Lu は改行コードを LF(UNIX 形式)に変換します。
Windows 側で編集したシェルスクリプトなどが CRLF になっていると、思わぬ動作不良の原因になることがあります。
その場合は -Lu を使って LF に揃えると安全です。

 

・Windows 用に改行コードを CRLF に変換する

nkf -Lw input.txt > windows.txt

-Lw は改行コードを CRLF(Windows 形式)に変換します。
Windows のエディタやツールで扱うことを前提としたテキストを用意するときに使えます。

 

・EUC-JP のファイルを UTF-8(LF)に変換して上書きする

nkf -w -Lu --overwrite *.html

文字コードを UTF-8 に、改行コードを LF に揃えた上で、元ファイルを上書きする例です。
既存サイトを UTF-8+LF に統一したいときなどに、ワンライナーで一括変換できます。
一括処理する場合は find コマンドと組み合わせることも多いです。

 

・ディレクトリ配下の .txt をまとめて UTF-8 に変換する

find . -name '*.txt' -exec nkf -w --overwrite {} \;

findnkf --overwrite を組み合わせて、ディレクトリ配下すべての .txt を UTF-8 に変換する例です。
特定拡張子だけを一括変換したいときに便利です。

 

・全角英数字を半角英数字に変換する

echo '123ABC abc' | nkf -Z

-Z は全角英数字や一部記号を半角に変換します。
古いシステムから出てきた全角だらけのデータを、プログラムで扱いやすいように整形したいときに使えます。

 

・全角スペースも含めて半角に変換する(和字間隔を ASCII スペースに)

echo 'あいうえお 123' | nkf -Z1

-Z1 は全角スペースを半角スペース 1 つに変換します。
レイアウト目的の全角スペースが邪魔なときに、まとめて半角に揃えたい場合に便利です。

 

・半角カナを全角カナに変換する

echo 'テストカナ' | nkf -X

-X は半角カナを全角カナに変換します(環境によって異なる場合あり)。
旧来のシステムから出力された半角カナを、見やすく整える用途などに使えます。

 

・1 行の文字数で簡易整形する(折り返し)

nkf -f60 long_text.txt

-f 数値 は、1 行の文字数を指定して簡単な整形(折り返し)を行います。
-f のみを指定した場合は 60 桁で折り返されます。

 




実務でのよくある使いどころ

 

・Windows 由来のファイルを UTF-8+LF に統一する
Web サイト更新やスクリプト開発で、Windows から渡された Shift_JIS+CRLF のファイルを、
UTF-8+LF に揃える用途で nkf はよく使われます。
nkf -w -Lu --overwrite を定番パターンとして覚えておくと便利です。
 

・既存資産を一括で文字コード変換する
古いシステムから移行する際に、大量のテキストをまとめて UTF-8 化したい、という場面でも nkf が役立ちます。
find と組み合わせて拡張子単位で一括変換することで、作業の手間を大きく減らせます。
 

・ログや CSV の文字化け対策
Windows クライアント向けに CSV を渡したい、メールのヘッダの文字化けを解析したい、といったときにも nkf が登場します。
文字コードと改行コードを整えることで、「開く人やツールによって表示が変わる」問題を減らせます。
 

・全角/半角の正規化
フォーム入力や既存データの中に全角英数字や全角スペースが混在しているとき、
nkf の -Z 系オプションで一度正規化しておくと、後続処理がシンプルになります。
 

nkf はオプションが多く一見難しそうに見えますが、
「文字コード変換(-s/-e/-w)」「改行コード変換(-L 系)」「上書き(–overwrite)」の3つを押さえておくだけでも、
日常的な「文字コード周りのもやもや」をかなり解消できます。
本番環境で一括変換を行う際は、事前バックアップとテストを忘れないようにしましょう。

 

オプション(よく使うオプションのみ)

 

short optionlong optiondescription
-g--guess入力ファイルの文字コードと改行コードを推測して簡易表示する
-j出力を JIS コードに変換する
-e出力を EUC-JP コードに変換する
-s出力を Shift_JIS コードに変換する
-w出力を UTF-8 コードに変換する
-Lu改行コードを LF の形式に変換する
-Lw改行コードを CRLF の形式に変換する
-Lm改行コードを CR の形式に変換する
--overwrite変換結果で入力ファイルを直接上書き保存する
-Z全角英数字や一部記号を半角に変換する
-Z1全角スペースを半角スペース一つに変換する
-Z2全角スペースを半角スペース二つに変換する
-X半角カナを全角カナに変換する
-f一行の文字数を指定して簡易的な整形を行う
-h--helpnkf コマンドの使い方(ヘルプ)を表示して終了する
-V--versionnkf コマンドのバージョン情報を表示して終了する
 

ここでは、Linux 環境で一般的に利用される nkf コマンドの主なオプションのみを TablePress の表としてまとめている想定です。
実際に利用できるオプションや挙動は、nkf のバージョンやディストリビューションによって異なる場合があるため、
本番環境で使用する前に man nkf で最新の仕様を確認してください。

ブログランキングに参加しています。クリックして応援していただけると嬉しいです。




人気ブログランキング


ブログランキング・にほんブログ村へ

にほんブログ村