# 徹底解明!超便利な「三行スクリプト」
_published: 2007/12/12_ 
まずは、こちらを。
- [満足せる豚。眠たげなポチ。:[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 クラスと正規表現で、大抵の用事は片付きます。」とのことです。さっそく試してみますね。