野田と申します。
教えていただいたコードをもとに文章中の指定したキーワードに
ヒットする行を取り出しそのキーワードより前か、後ろの文字列でソートする
スクリプトを書きました。
Data
あいうえお名前:謙次
naninuneno名前:ひろしfeerger
esbgrsbrbrgbgrbgrbgbggbbf
るびー名前:ゆきおeree

結果
naninuneno名前:ひろしfeerger
るびー名前:ゆきおeree
あいうえお名前:謙次

#----------Parameter-------------------
reg='名前:'    #wite 'regular expression'
field=1   #write field number to be sorted (Start--->0)
#-----------------------------------
class Array
   def sort_by
     collect { |e| [ yield(e), e ] }.sort.collect{ |e| e[1] }
   end
end
data=[]
while inline=gets
  if  inline =~ /#{reg}/s then
    data.push(inline)
  end
end
data.reverse
puts data.sort_by { |line| line.split(/#{reg}/s)[field] }

yieldのぶぶんは理解できませんが、そのまま使用しました。
もっとスマートになりますでしょうか。
どなたかyieldの部分を解説していただけませんでしょうか