# 徹底解明!超便利な「三行スクリプト」 _published: 2007/12/12_ ![alt](http://b.hatena.ne.jp/entry/image/http://d.hatena.ne.jp/shunsuk/20071212/1197464558) まずは、こちらを。 - [満足せる豚。眠たげなポチ。:[Ruby] 二時間の仕事を一秒で片付けてくれる(かもしれない)三行スクリプト。](http://blog.hacklife.net/archives/51329376.html) 「テキストファイルの各行に一括で同じような処理をして、その結果を得たい」というときに使えるそうです。ちょうど、ログファイルをゴニョゴニョして、、と思っていたのでナイスタイミングです。 下の3行のスクリプトをPATHの通ったところに置いておくそうです。 ```ruby script = ARGV.shift || '' lines = $stdin.readlines.map {|li| li.chomp} puts eval(script) ``` それを、こんな感じで使うと。rakeファイルからコメントで始まる行を抽出する例です。 ```sh $ type c:\ruby\bin\rake | firter "lines.select {|s| s =~ /^#/}" ``` これは便利!だと思うのですが、Ruby初心者なので、何をやっているのか分かりません。というわけで、徹底解明。 1行目。 `ARGV` は組み込み定数で、Rubyスクリプトに与えられた引数を表します。そこから、 `shift` で1つ取り出して `script` に格納。引数が無かったら、空の文字列を格納。 2行目。 `$stdin` は組み込み変数で、標準入力を表します。そこから全行を取り出します。 `map` は各要素を順番にブロックに渡して評価し、その結果で要素を置き換えます。ここでは、1行を取り出して、 `chomp` で改行を取り除いています。そして、全行を `lines` に格納。 3行目。 `eval` で `script` (つまり、このスクリプトの引数)を実行して、 `puts` で出力します。 次に、使用例の方です。 `type` はWindowsのコマンドです。rakeファイルの中身を出力します。それをパイプを使って、 `firter` (3行のスクリプト)に渡します。 `firter` の引数にRubyのコードを渡します。3行スクリプトの2行目で設定した `lines` 変数を使うことができます。 `select` で正規表現にマッチする行を抜き出します。その結果が画面に表示されます。 もっと複雑な使用例は、こちらを参考に。 - [満足せる豚。眠たげなポチ。:[Ruby] 二時間の仕事を一秒で片付けてくれる(かもしれない)三行スクリプト。](http://blog.hacklife.net/archives/51329376.html) 「Ruby の強力な Enumerable モジュールと String クラスと正規表現で、大抵の用事は片付きます。」とのことです。さっそく試してみますね。