必要なもの
ネットワーク漢字フィルター nkf
※macの場合、Homebrew が必要になります。
nkf インストールの手順
まず、nkfがインストールされているかを確認します。
$ which nkf
/usr/local/bin/nkf
インストールされていない場合、macの場合はbrewでインストールします。
$ brew install nkf
インストールしようとすると以下のエラーが出ることがあります
Error: The `brew link` step did not complete successfully
The formula built, but is not symlinked into /usr/local
Could not symlink share/man/ja/man1/nkf.1
/usr/local/share/man/ja/man1 is not writable.
権限周りを下記のコマンドを打って変更します。
sudo chmod 775 /usr/local/share/man/ja/man1
sudo chown <ユーザ名>:admin /usr/local/share/man/ja/man1
コマンドを確認します。
$ nkf -v
Network Kanji Filter Version 2.1.5 (2018-12-15)
Copyright (C) 1987, FUJITSU LTD. (I.Ichikawa).
Copyright (C) 1996-2018, The nkf Project.
使い方
nkfコマンドとは?
「nkf」は「Network Kanji Filter」の略で、LinuxとWindowsなど、異なるOS間でテキストデータを交換する際に問題となる文字コードと改行コードを変換するためのコマンドです。
nkfコマンドの書式
nkf オプション ファイル名
UTF-8に変換する場合は、オプションに wLu をつけて変換します。
$ nkf -wLu isofile.txt > utf8.txt
変換の流れ(手動編)
元ファイル moto.txt (UTF-8以外のファイルエンコード、改行コード)
↓
変換後のファイル ato.txt(UTF-8に変換したファイル)
↓
変換後のファイルをリネームする
# UTF-8に変換
$ nkf -wLu moto.txt > ato.txt
# 変換後のファイルを元のファイル名にリネームする
$ mv ato.txt moto.txt
# vimiでファイルエンコードを確認する
$ vim moto.txt
面倒ですね。ここで、一発でUTF-8に変換するコマンドを作成してみます。
変換の流れ(自動編)
# UTF-8に変換 wLu コマンドをこれから自作します
$ wLu moto.txt
$ vim moto.txt ← UTF-8 に変換されている!
コマンドの内容
まずファイルを作ります。ファイル名は wLu とします
# wLu というファイルを作成
$ :> wLu
# vim で wLu を開く
$ vim wLu
以下の内容をファイルに貼り付ける
#!/bin/bash
#################################################
# パラメータで渡されたファイル名をutf8に変換する
#
# 使い方
# wLu UTF-8に変換したいファイル名
# wLu を /usr/local/bin/にコピーすると
# 通常のコマンドとして本実行ファイルを利用する事が出来ます。
#
#################################################
#
filename="$1" ;
#
function wLu(){
if [ -f "$filename" ]; then
cat "$filename" | nkf -wLu > "$filename".u ;
mv "$filename".u "$filename" ;
fi
}
#
if ! which nkf >/dev/null 2>&1; then
echo "nkf がありません" ;
echo "nkf をインストールして下さい" ;
exit ;
fi
#
if [ -z "$filename" ] ; then
echo "第一引数にファイル名を指定して下さい"
echo "実行例: wLu filename" ;
exit ;
fi
# 実行
wLu ;
# 終了
exit ;
作成したファイルには日本語が含まれているため、wLuファイルを UTF-8に変換しておきます。
# wLu ファイルをnkf -wLu でUTF-8に変換
$ nkf -wLu wLu > wLu.txt
# wLu.txtをwLuにリネームします
$ mv wLu.txt wLu
# 作成したwLuコマンドファイルを/usr/local/bin にコピーします
$ sudo wLu /usr/local/bin/
# コマンドが配置されたかを確認
$ which wLu
$ /usr/local/bin/wLu
使い方
# UTF-8以外のファイルエンコードファイル
$ cat moto.txt
$ wLu moto.txt
変換結果を一時ファイルにし、リネームする手間が省けます。
便利ですね。