シェルで全角/半角/大文字/小文字/ひらがな/カタカナ/英字の変換を行うためにuconvを使う

はじめに

コマンドラインから全角/半角/大文字/小文字/ひらがな/カタカナ/英字の変換を行うために便利そうな uconv というツールを見つけたので紹介します。 サイトには以下のように書かれていました。

iconv(1) に加えて、Unicode 用の国際化コンポーネント (ICU) ツールセットの一部である uconv(1) コマンドも、1 つのエンコーディングから別のエンコーディングへの変換に使用できます。uconv は、229 のエンコーディングと、1000 を超える別名をサポートしています。

簡単にいうと iconv の上位互換ですね。 もうこれがあったら文字列変換の多くが実現できるんじゃないかと思いました。

検証環境

1
2
$ uconv --version
uconv v2.1  ICU 64.2

インストール

uconv コマンドは icu というパッケージに含まれています。 RedHat系ディストリビューションとDebian系ディストリビューションでインストール方法に違いがあるので注意。

RedHat系

1
2
3
$ sudo yum install icu

$ uconv --version

Debian系(Ubuntu)

1
2
3
$ sudo apt-get install icu-devtools

$ uconv --version

※手前味噌ですが、Dockerイメージも公開しました。インストールは不要です。

1
2
3
4
5
$ docker run -i --rm genzouw/uconv --version
uconv v2.1  ICU 64.2

# ~/.bashrcや~/.zshrcにエイリアス設定しておくと便利
$ alias uconv='docker run -i --rm genzouw/uconv'

色々変換してみる

早速いろいろ変換してみます。

-x <引数> で指定した変換処理を適用することができます。

英字(アルファベット)からの変換 を例にとってみます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# ひらがなに変換
$ echo genzou | uconv -x hiragana
げんぞう

# カタカナに変換
$ echo genzou | uconv -x katakana
ゲンゾウ

# 全角に変換
$ echo genzou | uconv -x Halfwidth-Fullwidth
genzou

# 半角に変換
$ echo genzou | uconv -x Fullwidth-Halfwidth
genzou

# 大文字に変換
$ echo genzou | uconv -x upper
GENZOU

# 小文字に変換
$ echo GENZOU | uconv -x lower
genzou

# danzouに変換(gをdに、eをaに)
$ echo genzou | uconv -x 'g>d;e>a'
danzou

# 文字コードをMS932からUTF8に変換
$ uconv -f cp932 -t UTF-8 -o utf8.txt cp932.txt

# UTF8のファイルからBOMが削除
$ cat utf8-bom.txt | uconv --remove-signature

さらにパイプで繋いでやれば複数の変換処理を適用することも可能です。

1
2
$ echo もったいない | uconv -x latin | uconv -x upper | uconv -x halfwidth-fullwidth
MOTTAINAI

ひとこと

uconv 、めちゃくちゃ便利だなと思いました。 Webで受け取った入力情報をValidateした後に変換するのにも利用できそうです。