1#!/bin/sh 2# 3# $NetBSD: zgrep,v 1.6 2008/04/27 09:27:55 nakayama Exp $ 4# 5# Copyright (c) 2003 Thomas Klausner. 6# 7# Redistribution and use in source and binary forms, with or without 8# modification, are permitted provided that the following conditions 9# are met: 10# 1. Redistributions of source code must retain the above copyright 11# notice, this list of conditions and the following disclaimer. 12# 2. Redistributions in binary form must reproduce the above copyright 13# notice, this list of conditions and the following disclaimer in the 14# documentation and/or other materials provided with the distribution. 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="" 33hyphen=0 34silent=0 35 36prg=$0 37 38# handle being called 'zegrep' or 'zfgrep' 39case ${prg} in 40 *zegrep) 41 grep_args="-E";; 42 *zfgrep) 43 grep_args="-F";; 44esac 45 46# skip all options and pass them on to grep taking care of options 47# with arguments, and if -e was supplied 48 49while [ $# -gt 0 -a ${endofopts} -eq 0 ] 50do 51 case $1 in 52 # from GNU grep-2.5.1 -- keep in sync! 53 -[ABCDXdefm]) 54 if [ $# -lt 2 ] 55 then 56 echo "${prg}: missing argument for $1 flag" >&2 57 exit 1 58 fi 59 case $1 in 60 -e) 61 pattern="$2" 62 pattern_found=1 63 shift 2 64 break 65 ;; 66 *) 67 ;; 68 esac 69 grep_args="${grep_args} $1 $2" 70 shift 2 71 ;; 72 --) 73 shift 74 endofopts=1 75 ;; 76 -) 77 hyphen=1 78 shift 79 ;; 80 -h) 81 silent=1 82 shift 83 ;; 84 -*) 85 grep_args="${grep_args} $1" 86 shift 87 ;; 88 *) 89 # pattern to grep for 90 endofopts=1 91 ;; 92 esac 93done 94 95# if no -e option was found, take next argument as grep-pattern 96if [ ${pattern_found} -lt 1 ] 97then 98 if [ $# -ge 1 ]; then 99 pattern="$1" 100 shift 101 elif [ ${hyphen} -gt 0 ]; then 102 pattern="-" 103 else 104 echo "${prg}: missing pattern" >&2 105 exit 1 106 fi 107fi 108 109# call grep ... 110if [ $# -lt 1 ] 111then 112 # ... on stdin 113 ${zcat} -fq - | ${grep} ${grep_args} -- "${pattern}" - 114else 115 # ... on all files given on the command line 116 if [ ${silent} -lt 1 ]; then 117 grep_args="-H ${grep_args}" 118 fi 119 while [ $# -gt 0 ] 120 do 121 ${zcat} -fq -- "$1" | ${grep} --label="${1}" ${grep_args} -- "${pattern}" - 122 shift 123 done 124fi 125 126exit 0 127