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