Page suivante Page précédente Table des matières

8. Utiliser bzip2 avec grep

L'utilitaire suivant, que j'appelle bgrep, est une version légèrement modifié du zgrep livré avec Linux. Vous pouvez l'utiliser pour "grep-er" dans les fichiers sans avoir besoin de les décompresser avant tout.

#!/bin/sh

# bgrep -- un wrapper autour du programme grep qui décompresse les
# fichiers à l'utilisation
# NdT: un "wrapper" est un programme qui effectue certaines manipulations
# avant d'envoyer les résultats à un sous-programme. Ici, "bgrep" lance la
# décompression automatique et transparente pour l'utilisateur des fichiers
# bzip2 lorsqu'une demande pour chercher une chaîne quelconque à l'aide de
# grep est effectuée sur un fichier bzip2.

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 bogué avec -e sous 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 au travers des fichiers bzip2"
  echo "utilisation: $prog [options_grep] chaîne [fichiers]"
  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


Page suivante Page précédente Table des matières