質問: Rubyのワンライナー上でのスクリプトについて質問です。 ファイルfoo.txtのn行目からm行目までを表示するワンライナーで、 $ cat foo.txt | ruby -ne 'print if n..m' という書き方をよく目にします。 このワンライナー中でRubyの実行スクリプトの部分は、 省略せずに書くと、どのようになるのでしょうか? 特に範囲オブジェクトが、何に作用しているのかがわかりません。 ファイルfoo.txtのなかで正規表現にマッチする行を表示するワンライナー $ cat foo.txt | ruby -ne 'print if /bar/' は、 while gets() print $_ if $_ =~ /bar/ end だと思うのですが、 できればこのような形で示していただけると助かります。 初歩的な質問で申し訳ありませんが、よろしくお願いします。
回答: 何か抜けてませんか? こんなのならわかりますが。 ``` $ cat foo.txt | ruby -ne 'print if ($.==2)..($.==4)' line 2 line 3 line 4 ``` 範囲式 - 条件式としての範囲式: > > 条件式として範囲式が用いられた場合には、状態を持つ sed や awk 由来の特殊な条件式として振る舞います。 > > > 「..」の場合: > > > 1. 初期状態では式1だけを評価し、式1が真を返すまでは false を返します。 > 2. 式1が真を返すと true を返します。式2が真なら初期状態に戻ります。 > 3. この後は式2だけを評価し、式2が真を返すまで true を返します。 > 4. 式2が真を返すと true を返したあと、初期状態に戻ります。 > > >