diff options
Diffstat (limited to 'gnu/usr.bin/gzip/zgrep')
-rw-r--r-- | gnu/usr.bin/gzip/zgrep | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/gnu/usr.bin/gzip/zgrep b/gnu/usr.bin/gzip/zgrep new file mode 100644 index 0000000..bcc10cc --- /dev/null +++ b/gnu/usr.bin/gzip/zgrep @@ -0,0 +1,72 @@ +#!/bin/sh + +# zgrep -- a wrapper around a grep program that decompresses files as needed +# Adapted from a version sent by Charles Levert <charles@comm.polymtl.ca> + +PATH="/usr/local/bin:$PATH"; export PATH + +prog=`echo $0 | sed 's|.*/||'` +case "$prog" in + *egrep) grep=${EGREP-egrep} ;; + *fgrep) grep=${FGREP-fgrep} ;; + *) grep=${GREP-grep} ;; +esac +A= +fileno=0 +pat="" +while test $# -ne 0; do + case "$1" in + -e | -f) opt="$opt $1"; shift; pat="$1" + if test "$grep" = grep; then # grep is buggy with -e on SVR4 + grep=egrep + fi;; + -*) opt="$opt $1";; + *) if test -z "$pat"; then + pat="$1" + else + fileno=`expr $fileno + 1` + eval A$fileno=\$1 + A="$A \"\$A$fileno\"" + fi + ;; + esac + shift +done + +if test -z "$pat"; then + echo "grep through gzip files" + echo "usage: $prog [grep_options] pattern [files]" + exit 1 +fi + +list=0 +silent=0 +op=`echo "$opt" | sed -e 's/ //g' -e 's/-//g'` +case "$op" in + *l*) list=1 +esac +case "$op" in + *h*) silent=1 +esac + +if test $fileno -eq 0; then + gzip -cdfq | $grep $opt "$pat" + exit $? +fi +eval set "$A" # files in $1, $2 ... + +res=0 +for i do + if test $list -eq 1; then + gzip -cdfq "$i" | $grep $opt "$pat" > /dev/null && echo $i + r=$? + elif test $# -eq 1 -o $silent -eq 1; then + gzip -cdfq "$i" | $grep $opt "$pat" + r=$? + else + gzip -cdfq "$i" | $grep $opt "$pat" | sed "s|^|${i}:|" + r=$? + fi + test "$r" -ne 0 && res="$r" +done +exit $res |