Rubyコマンドラインリファレンス ReFe

第十回


Rubyまつもとゆきひろ氏が作ったスクリプト言語である.
そのリファレンスは様々あるが,今回はコマンドラインから使えるReFeをインストールした.
インストール方法は以下の通り.gemsがあれば非常に簡単だ.

$ gem install refe


このReFe.読み方は「りふぇ」でコマンドライン上から

$ refe -r str gsu

というようにして使う.出力結果は以下の感じ.

String#gsub
--- gsub(pattern, replace)
--- gsub!(pattern, replace)
--- gsub(pattern) {|matched| .... }
--- gsub!(pattern) {|matched| .... }

    文字列中で pattern にマッチする部分((*全て*))を replace で
    置き換えます。置換文字列 replace 中の \& と
    \0 はマッチした部分文字列に、\1 ... \9 は n 番
    目の括弧の内容に置き換えられます。置換文字列内では \`、
    \'、\+ も使えます。これらは $`、
    $'、$+ に対応します。

          p 'abcabc'.gsub(/b/, '(\&)')   #=> "a(b)ca(b)c"

    引数 replace を省略した時にはイテレータとして動作し、
    ブロックを評価した結果で置換を行います。ブロックには引数として
    マッチした部分文字列が渡されます。
    またブロックなしの場合と違い、ブロックの中からは組み込み変数
    $<digits> [組み込み変数] を参照できます。

          p 'abcabc'.gsub(/b/) {|s| s.upcase }  #=> "aBcaBc"
          p 'abcabc'.gsub(/b/) { $&.upcase }    #=> "aBcaBc"

    gsub は置換後の文字列を生成して返します。
    gsub! は self を変更して返しますが、置換が起こらなかっ
    た場合は nil を返します。

          p 'abcdefg'.gsub(/cd/, 'CD')   #=> "abCDefg"

          str = 'abcdefg'
          str.gsub!(/cd/, 'CD')
          p str                          #=> "abCDefg"

          p 'abbbxabx'.gsub(/a(b+)/, '\1')   #=> "bbbxbx"

    ((*注意*)): 引数 replace の中で $<digits> [組み込み変数/$1]
    を使うことはできません。この文字列が評価される時点ではまだマッチが
    行われていないからです。また replace は \ を 2 重にエ
    スケープしなければなりません(trap::\の影響参照)。

          # 第二引数の指定でよくある間違い
          p 'abbbcd'.gsub(/a(b+)/, "#{$1}")       # これは間違い
          p 'abbbcd'.gsub(/a(b+)/, "\1")          # これも間違い
          p 'abbbcd'.gsub(/a(b+)/, "\\1")         # これは正解
          p 'abbbcd'.gsub(/a(b+)/, '\1')          # これも正解
          p 'abbbcd'.gsub(/a(b+)/, '\\1')         # これも正解(より安全)
          p 'abbbcd'.gsub(/a(b+)/) { $1 }         # これも正解(もっとも安全)

    sub も参照してください。

    ruby 1.7 feature: 1.6 以前は、pattern が文字列の場合、
    その文字列を正規表現にコンパイルしていました。1.7 以降は、その文字
    列そのものがパターンになります。

このように日本語のリファレンスを見ることが出来る.ちなみに,ReFeの返す結果の文字コードは「EUC-JP」である.しかし,FedoraCore4のgnome端末のデフォルト文字コードは「UTF-8」であるため,結果が文字化けしてしまう.これをとりあえず回避するには,以下のようにパイプラインでnkfに出力結果を渡すと良い.

$ refe -r str gsu | nkf -w

nkf文字コードを変換するプログラムで,オプションに-wを指定するとUTF-8に変換してくれる.なお,入力文字コードは自動で判別される.


おしまい