【wLu】Bashで便利なコマンドを作ってみようって話

必要なもの

ネットワーク漢字フィルター 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

変換結果を一時ファイルにし、リネームする手間が省けます。
便利ですね。

書籍の紹介

【unComp】Bashで便利なコマンドを作ってみようって話

【unComp】Bashで便利なコマンドを作ってみようって話

hugoで[failed to unmarshal YAML]エラーが出た場合の対処法

hugoで[failed to unmarshal YAML]エラーが出た場合の対処法