Great responses, thank you all very much. I read Jonathan Gardner's solution first and investigated sets. It's clearly superior to my first cut.
I love the comment about regular expressions. In perl, I've reached for regexes WAY too much. That's a big lesson learned too, and from my point of view not because of performance (although that's most likely a bonus) but because of code readability. Here's the version I have now. It looks quite similar to sjdevnull's. Further comments appreciated, and thanks again. #!/usr/bin/env python import sys, fileinput, os filename = '/etc/hosts' hosts = [] search_terms = set(sys.argv[1:]) for line in open(filename, 'r'): if line.startswith('#'): continue try: hostname = line.strip().split('\t')[2] # The host I want is always at the 3rd tab. except IndexError: continue if hostname.startswith('float.') or hostname.startswith('localhost.'): continue if search_terms <= set(hostname.split('.')): # same as if search_terms.issubset(hostname.split('.')): hosts.append(hostname) if len(hosts) == 1: os.execl("/usr/bin/ssh", '-A', hosts[0]) else: for host in hosts: print host -- http://mail.python.org/mailman/listinfo/python-list