Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Next Previous Contents

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




Next Previous Contents