zgrep revision 1.1
1#!/bin/sh
2
3# Copyright (c) 2003 Thomas Klausner.
4#
5# Redistribution and use in source and binary forms, with or without
6# modification, are permitted provided that the following conditions
7# are met:
8# 1. Redistributions of source code must retain the above copyright
9#    notice, this list of conditions and the following disclaimer.
10# 2. Redistributions in binary form must reproduce the above copyright
11#    notice, this list of conditions and the following disclaimer in the
12#    documentation and/or other materials provided with the distribution.
13# 3. The name of the author may not be used to endorse or promote products
14#    derived from this software without specific prior written permission.
15#
16# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
20# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26
27grep=/usr/bin/grep
28zcat=/usr/bin/zcat
29
30endofopts=0
31pattern_found=0
32grep_args=""
33
34prg=$0
35
36# handle being called 'zegrep' or 'zfgrep'
37case ${prg} in
38    *zegrep)
39	grep_args="-E";;
40    *zfgrep)
41	grep_args="-F";;
42esac
43
44# skip all options and pass them on to grep taking care of options
45# with arguments, and if -e was supplied
46
47while [ $# -gt 0 -a ${endofopts} -eq 0 ]
48do
49    case $1 in
50    # from GNU grep-2.5.1 -- keep in sync!
51	-[ABCDXdefm])
52	    case $1 in
53		-e)
54		    pattern_found=1;;
55		*)
56		    ;;
57	    esac
58
59	    if [ $# -lt 2 ]
60		then
61		echo "${prg}: missing argument for ${saved_arg} flag" >&2
62		exit 1
63	    fi
64	    grep_args="${grep_args} $1 $2"
65	    shift 2
66	    ;;
67	--)
68	    grep_args="${grep_args} $1"
69	    shift
70	    endofopts=1
71	    ;;
72	-)
73	    endofopts=1
74	    ;;
75	-*)
76	    grep_args="${grep_args} $1"
77	    shift
78	    ;;
79	*)
80	    # pattern to grep for
81	    endofopts=1
82	    ;;
83    esac
84done
85
86# if no -e option was found, take next argument as grep-pattern
87if [ ${pattern_found} -lt 1 ]
88then
89    if [ $# -lt 1 ]
90    then
91	echo "${prg}: missing pattern" >&2
92	exit 1
93    fi
94    pattern=$1
95    shift
96fi
97
98# call grep ...
99if [ $# -lt 1 ]
100then
101    # ... on stdin
102    ${zcat} - | ${grep} ${grep_args} ${pattern} -
103else
104    # ... on all files given on the command line
105    while [ $# -gt 0 ]
106    do
107	${zcat} -- "$1" | ${grep} -H --label="${1}" ${pattern} ${grep_args} -
108	shift
109    done
110fi
111
112exit 0
113