#!/bin/sh - PATH=/bin:/usr/bin; export PATH dfthosts=$HOME/etc/hosts # hosts - list hosts with given keys # Steve Kinzler, kinzler@cs.indiana.edu, Sep 93/Jan 02 # http://www.cs.indiana.edu/~kinzler/home.html#homedir HOSTS=${HOSTS-$dfthosts} l=1 v=; bad= while : do case $# in 0) break;; *) case "$1" in -) HOSTS=;; -l) l=0;; -v) v=$1;; --) shift; break;; -h) bad=t; break;; -*) bad=t; echo "$0: unknown option ($1)" 1>&2;; *) break;; esac shift;; esac done case "$bad" in ?*) cat << EOF 1>&2 usage: $0 [ - ] [ -l ] [ -v ] [ 0-9... | NF | key ... ] - read hosts file on stdin -l list all columns for matched hosts -v invert matching criteria The hosts file is taken as \$HOSTS else $dfthosts. A column number indicates matching on first unique values for that column, with NF indicating the last column. EOF exit 1;; esac cat $HOSTS | sed -e :a -e '/\\$/N; s/.\n//; ta' | sed ' s/#.*// s/[ ][ ]*/ /g /^ *$/d s/^ //; s/ $//' | case "$#,`echo "$1" | egrep '^[0-9][0-9]*$|^NF$'`" in 1,?*) case "$v" in ?*) v=!;; *) v==;; esac awk '{ if (seen[$'$1'] '$v'= "") print $'$l' seen[$'$1']++ }';; *) patt=`echo $* | sed 's/^/@/; s/ /@|@/g; s/$/@/'` case "$patt" in ''|@@) patt=\^;; esac sed 's/^/@/; s/ /@@/g; s/$/@/' | egrep $v "$patt" | case "$l" in 0) sed 's/^@//; s/@@/ /g; s/@$//';; *) sed 's/^@//; s/@.*//';; esac;; esac