#!/usr/bin/env ruby raise ArgumentError, "Usage: #{$0} " unless ARGV.length >= 1 email = [] File.new(ARGV[0]).read.scan(/([\w_.+-]+)@([\w.+_-]+\.)+(\w{2,3}|\d{1,3})/) do | user , server, tld | email.push({:user=>user,:server=>server,:tld=>tld}) end puts "Please set the sort order 1 = user, 2 = server, 3 = top level domain:\n" order = case STDIN.gets.strip when '2' then [:server,:tld,:user] when '3' then [:tld,:server,:user] else [:user,:server,:tld] end email.sort! do | a, b | d = 0 order.each do | o | d = a[o].downcase <=> b[o].downcase break unless d == 0 end d end email.each do | e | puts "#{e[:user]}@#{e[:server]}#{e[:tld]}" end