## 8. Использование bzip2 с grep

Следующая утилита, которую я называю bgrep, является небольшой модификацией Zgrep, которая поставляется с Linux. Вы можете использовать ее как grep для файлов без предварительного bunzip2'ния.

      #!/bin/sh

      # bgrep -- a wrapper around a grep program that decompresses files as needed

      PATH="/usr/bin:$PATH"; export PATH

      prog=`echo $0 | sed 's|.*/||'`

      case "$prog" in

              *egrep) grep=${EGREP-egrep}     ;;

              *fgrep) grep=${FGREP-fgrep}     ;;

              *)      grep=${GREP-grep}       ;;

      esac

      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

                   break;

                 fi;;

        esac

        shift

      done

      if test -z "$pat"; then

        echo "grep through bzip2 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 $# -eq 0; then

        bzip2 -cd | $grep $opt "$pat"

        exit $?

      fi

      res=0

      for i do

        if test $list -eq 1; then

          bzip2 -cdfq "$i" | $grep $opt "$pat" > /dev/null && echo $i

          r=$?

        elif test $# -eq 1 -o $silent -eq 1; then

          bzip2 -cd "$i" | $grep $opt "$pat"

          r=$?

        else

          bzip2 -cd "$i" | $grep $opt "$pat" | sed "s|^|${i}:|"

          r=$?

        fi

        test "$r" -ne 0 && res="$r"

      done

      exit $res