ruby1.9のワンライナーと文字コード

pythonコードのインデントを2から4に変えるこんなことをやってみた。

$ find . -name "*.py" | xargs ruby -pe '$_.sub!(/^(  )+/){|m| m*2}'
-e:1:in `sub!': invalid byte sequence in UTF-8 (ArgumentError)

対象のファイルにutf-8のものとcp932にものが混在しているのはわかっているのでascii指定にする。

$ find . -name "*.py" | xargs ruby --encoding=ascii -pe '$_.sub!(/^(  )+/){|m| m*2}'
-e:1:in `sub!': invalid byte sequence in US-ASCII (ArgumentError)

がんばってascii-8bitを指定する。

$ find . -name "*.py" | xargs ruby --encoding=ASCII-8BIT -pe '$_.sub!(/^(  )+/){|m| m*2}'

やっと成功。
(上記の例は危険なのでrubyのオプションから"-i"をわざと省いてあります。失敗する度にgit checkout -- .しているw)


有効なエンコードを探すにはこんな感じで。

$ ruby -e 'puts Encoding::list' | grep -i ascii
ASCII-8BIT
US-ASCII