#!/bin/bash
#  bin-grep.sh: Dans un fichier binaire, trouve toutes les chaînes de caractères 
#* qui sont conformes à un motif.

# Équivalent de "grep" pour les fichiers binaires.
# Similaire par son effet à "grep -a"

E_MAUVAISARGS=65
E_PASDEFICHIER=66

if [ $# -ne 2 ]
then
  echo "Usage: `basename $0` chaine_recherchee nomfichier"
  exit $E_MAUVAISARGS
fi

if [ ! -f "$2" ]
then
	echo "Le fichier \"$2\" n'existe pas."
  exit $E_PASDEFICHIER
fi  

IFS=$'\012'       # Suivant la suggestion de Anton Filippov.
                  # on avait auparavant :  IFS="\n"
for mot in $( strings "$2" | grep "$1" )
# La commande "strings" extrait les chaînes de caractères des fichiers
#+ binaires.
# Sortie envoyée à travers un tube vers "grep", qui recherche la
# chaîne désirée.

do
  echo $mot
done

#  Comme nous l'a indiqué S.C., on pourrait remplacer 
#+ les lignes 23 à 33 ci-dessus par la chaîne :
#    strings "$2" | grep "$1" | tr -s "$IFS" '[\n*]'


#+ Pour comprendre ce script,
#+ Essayez quelque chose comme "./bin-grep.sh mem /bin/ls"

exit 0
