読者です 読者をやめる 読者になる 読者になる

それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

全角数字を半角数字(ascii char) にするコマンド(大雑把な方法とか色々ごった煮)

1234567890⇛ 1234567890 を実現する方法色々。

全角数字と半角数字の変換は、文字コードとか、何バイト文字とか意識してないと面倒なのですが。。。tr コマンドで出来そうで出来ないんですよね。

文字コードや、マルチバイト、その他のことを考慮すると候補となる手法は数種類ある。

とりえず、sed

sedvim の置換コマンドでやるなら、 y をつける。

 echo 1234 | sed y/12345/12345/
1234

だから、全部書くという大雑把な方法をとれる。

sed y/0123456789/0123456789/

もうね、覚えやすいし、思い出しやすいし、コレでいいんじゃないかと思うんだけど。

文字コードUTF-8 決め打ちなんですね(OSXBashCygwinUTF-8だから。)

nkf で全角⇛半角

nkf を使う方法をは、数字を変換するのに正統派の方法だと思う

 echo 1234 | nkf -m0Z1
1234

しかも、これは文字コードが多少変わっても対応できる

echo 1234 | nkf -e |  nkf -m0Z1 -w
1234

ワンライナーでやる

rubyワンライナーでもできるnkf / kconv

けど、これはnkf 呼ぶから、ぶっちゃけNKFコマンドと変わらんね。

echo 1234 | ruby -r nkf  -ape '$_=NKF.nkf("-m0Z1 -w ", $_)'

kconv だって nkf のラッパーのはずだから、nkf でいいような気がする。

ruby の tr は賢い。tr コマンドよりもこっちほうが使える

echo 1234 | ruby  -ape '$_=$_.tr("0-9","0-9")'

tr コマンドは。。。

 echo 1234 | tr 0-9 0-9
993994995996

tr コマンドは char を前提に作られているので、 utf-8 なマルチバイト文字の前には、無力。残念。

phpワンライナーも結構賢い。

なんとはなく調べていたら、phpワンライナーって結構賢いな。今度から使うことも検討しよう。

echo 1234 | php -R 'echo mb_convert_kana($argn, "n", "utf-8")."\n";'
1234

php -R で ruby -ne と 全く同じですね。便利

結論 sed が一番覚えやすい

 echo 1234 | sed y/12345/12345/
1234

次点は、ruby の tr が tr コマンドっぽいので使いやすかった

参考資料

http://blog.livedoor.jp/maru_tak/archives/50699141.html

恵比寿のベンチャーで働くエンジニアのメモ帳|【Ruby】全角英数字を半角にする

module Kconv

ワンライナーのためのPHPコマンドラインオプション - hnwの日記

広告を非表示にする