From: gotoken@... (GOTO Kentaro) Date: 1999-04-05T20:51:51+09:00 Subject: [ruby-list:13306] if 条件での範囲指定 ごとけんです In message "[ruby-list:13302] if 条件での範囲指定" on 99/04/05, 中川 誠 writes: >while STDIN.gets > if /^ +aaaa:/ ... /^ +-+/ > print $_ > end >end 上の if の動作はちょっとわかりません。条件を省略せずに書くと、 if ($_ =~ /^ +aaaa:/) ... ($_ =~ /^ +-+/) となります(多分)。 >sed では以下のようになりますが、これは意図された仕様なのでしょうか。sed >の動作の方が納得がいくのですが。 > >macon@nakagawa$ sed -n '/^ *aaaa:/,/^ *--*/p' < data.txt > aaaa: test1 > test2 > test3 > ---------------+-------------------------------------- この sed の範囲指定は、「,」の左右にある二つの正規表現の間 ならば、アクション p を行うということですよね。ruby での 素直な書き方は思い付きません。 if じゃないし、ちょっと長いけどこんな感じでどうでしょう?? STDIN.read.scan(/(^ +aaaa:(((?!^ +-+).*\n)+)) +-+/){|i,*dummy| print i } -- gotoken