home *** CD-ROM | disk | FTP | other *** search
/ PC World 2005 December (Special) / PCWorld_2005-12_Special_cd.bin / Bezpecnost / lsti / lsti.exe / framework-2.5.exe / zegrep < prev    next >
Text File  |  2003-07-24  |  3KB  |  114 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}    ;;
  29.     *fgrep)    grep=${FGREP-fgrep}    ;;
  30.     *)    grep=${GREP-grep}    ;;
  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.   gzip -cdfq | $grep $opt "$pat"
  90.   exit $?
  91. fi
  92.  
  93. res=0
  94. for i do
  95.   gzip -cdfq "$i" |
  96.     if test $files_with_matches -eq 1; then
  97.       $grep $opt "$pat" > /dev/null && echo $i
  98.     elif test $files_without_matches -eq 1; then
  99.       $grep $opt "$pat" > /dev/null || echo $i
  100.     elif test $with_filename -eq 0 && { test $# -eq 1 || test $no_filename -eq 1; }; then
  101.       $grep $opt "$pat"
  102.     else
  103.       if test $with_filename -eq 1; then
  104.     sed_script="s|^[^:]*:|${i}:|"
  105.       else
  106.     sed_script="s|^|${i}:|"
  107.       fi
  108.       $grep $opt "$pat" | sed "$sed_script"
  109.     fi
  110.   r=$?
  111.   test $res -lt $r && res=$r
  112. done
  113. exit $res
  114.