home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / boot / i386 / rescue / usr / bin / zfgrep < prev    next >
Text File  |  2006-11-29  |  4KB  |  134 lines

  1. #!/bin/sh
  2.  
  3. # zgrep -- a wrapper around a grep program that decompresses files as needed
  4. # Adapted from a version sent by Charles Levert <charles@comm.polymtl.ca>
  5.  
  6. # Copyright (C) 1998, 2001, 2002 Free Software Foundation
  7. # Copyright (C) 1993 Jean-loup Gailly
  8.  
  9. # This program is free software; you can redistribute it and/or modify
  10. # it under the terms of the GNU General Public License as published by
  11. # the Free Software Foundation; either version 2, or (at your option)
  12. # any later version.
  13.  
  14. # This program is distributed in the hope that it will be useful,
  15. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17. # GNU General Public License for more details.
  18.  
  19. # You should have received a copy of the GNU General Public License
  20. # along with this program; if not, write to the Free Software
  21. # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  22. # 02111-1307, USA.
  23.  
  24. PATH="/usr/bin:$PATH"; export PATH
  25.  
  26. prog=`echo "$0" | sed 's|.*/||'`
  27. case "$prog" in
  28.     *egrep)    grep=${EGREP-egrep -a}    ;;
  29.     *fgrep)    grep=${FGREP-fgrep -a}    ;;
  30.     *)    grep=${GREP-grep -a}    ;;
  31. esac
  32.  
  33. pat=""
  34. after_dash_dash=""
  35. files_with_matches=0
  36. files_without_matches=0
  37. no_filename=0
  38. with_filename=0
  39.  
  40. while test $# -ne 0; do
  41.   case "$after_dash_dash$1" in
  42.   --d* | --rec*)    echo >&2 "$0: $1: option not supported"; exit 2;;
  43.   --files-with-*)    files_with_matches=1;;
  44.   --files-witho*)    files_without_matches=1;;
  45.   --no-f*)    no_filename=1;;
  46.   --wi*)    with_filename=1;;
  47.   --*)    ;;
  48.   -*)
  49.     case "$1" in
  50.     -*[dr]*) echo >&2 "$0: $1: option not supported"; exit 2;;
  51.     esac
  52.     case "$1" in
  53.     -*H*)    with_filename=1;;
  54.     esac
  55.     case "$1" in
  56.     -*h*)    no_filename=1;;
  57.     esac
  58.     case "$1" in
  59.     -*L*)    files_without_matches=1;;
  60.     esac
  61.     case "$1" in
  62.     -*l*)    files_with_matches=1;;
  63.     esac;;
  64.   esac
  65.   case "$after_dash_dash$1" in
  66.   -[ef])   opt="$opt $1"; shift; pat="$1"
  67.            if test "$grep" = grep; then  # grep is buggy with -e on SVR4
  68.              grep=egrep
  69.            fi;;
  70.   -[ABCdm])opt="$opt $1 $2"; shift;;
  71.   --)      opt="$opt $1"; after_dash_dash=1;;
  72.   -*)       opt="$opt $1";;
  73.    *)      if test -z "$pat"; then
  74.          pat="$1"
  75.        else
  76.          break;
  77.            fi;;
  78.   esac
  79.   shift
  80. done
  81.  
  82. if test -z "$pat"; then
  83.   echo "grep through gzip files"
  84.   echo "usage: $prog [grep_options] pattern [files]"
  85.   exit 2
  86. fi
  87.  
  88. if test $# -eq 0; then
  89.   if type -p dd        &> /dev/null && \
  90.      type -p mimencode &> /dev/null && \
  91.      type -p file      &> /dev/null
  92.   then
  93.     uncompress="gzip"
  94.     x=`dd bs=20 count=1 2> /dev/null | mimencode -b`
  95.     case "`echo -n $x | mimencode -u -b | file -b -`" in
  96.       bzip2*) uncompress="bzip2" ;;
  97.     esac
  98.     (echo -n $x | mimencode -u -b; cat -) | $uncompress -cdfq | $grep $opt "$pat"
  99.     exit $?
  100.   else
  101.     gzip -cdfq | $grep $opt "$pat"
  102.     exit $?
  103.   fi
  104. fi
  105.  
  106. res=0
  107. for i do
  108.   uncompress="gzip"
  109.   if test "${i##*.}" = "bz2" ; then
  110.     uncompress="bzip2"
  111.   fi
  112.   $uncompress -cdfq "$i" |
  113.     if test $files_with_matches -eq 1; then
  114.       $grep $opt "$pat" > /dev/null && printf "%s\n" "$i"
  115.     elif test $files_without_matches -eq 1; then
  116.       $grep $opt "$pat" > /dev/null || printf "%s\n" "$i"
  117.     elif test $with_filename -eq 0 && { test $# -eq 1 || test $no_filename -eq 1; }; then
  118.       $grep $opt "$pat"
  119.     else
  120.       i=${i//\\/\\\\}
  121.       i=${i//|/\\|}
  122.       i=${i//&/\\&}
  123.       if test $with_filename -eq 1; then
  124.     sed_script="s|^[^:]*:|${i}:|"
  125.       else
  126.     sed_script="s|^|${i}:|"
  127.       fi
  128.       $grep $opt "$pat" | sed "$sed_script"
  129.     fi
  130.   r=$?
  131.   test $res -lt $r && res=$r
  132. done
  133. exit $res
  134.