La commande egrep


La commande egrep permet d'extraire un motif donné dans un fichier donné. Elle est utilisée sous l'environnement Cygwin.


Le résultat du programme décrit ci-dessous est visible dans ce tableau.


Explication générale :
Nous avons utilisé un programme pour pouvoir automatiser cette tâche. Le programme devait permettre de lire les fichiers contenus dans des sous-dossiers du répertoire dump, d'extraire dans ces fichiers le motif recherché et son contexte, ici "barrage" et d'enregistrer dans des fichiers de sortie le résultat de cette extraction.

Nous avons décidé de combiner les programmes des tâches précédentes avec le programme egrep afin d'obtenir un tableau récapitulatif des liens.


Voici le programme qui combine toutes les tâches dans un seul tableau :
#!/bin/bash

echo "Nom du tableau";
read tablo;
echo "<html><head><title>tableau de liens</title></head><body><font face=Arial><table border=0 border=0 bordercolor=black><tr><th>Wget</th><th>Lynx</th><th>Egrep</th></tr>" > $tablo;

for sens in `ls wget`
do
mkdir ./dump/$sens;
mkdir ./egrep/$sens;
echo "<tr><td bgcolor="#DDDDDD"><b>$sens</b></td><td bgcolor="#DDDDDD"></td><td bgcolor="#DDDDDD"></td></tr>" >> $tablo;

for fic in `ls wget/$sens/*.htm*`
do
echo $fic;
lynx -dump $fic > $fic.txt
mv $fic.txt ./dump/$sens/;

for fichier in `ls dump/$sens/*.txt`
do
echo $fichier;
egrep -i 'barrage' $fichier > $fichier.txt
mv $fichier.txt ./egrep/$sens/;
done

for fichierdump in `ls dump/$sens/*.txt`
do
echo $fichierdump;
done

for fichiereg in `ls egrep/$sens/*.txt`
do
echo $fichiereg;
done

echo "<tr><td><font size="2"><a href="$fic">$fic</a></font></td><td><font size="2"><a href="$fichierdump">$fichierdump</a></font></td><td><font size="2"><a href="$fichiereg">$fichiereg</a></font></td></tr>" >> $tablo;

done
done

echo "</table></font></body></html>" >> $tablo;


Commentaire :
Reprenons en détail le script pour commenter les commandes qui le constituent.
#!/bin/bash

echo "Nom du tableau";

 # Sur la console de Cygwin, nous demandons à l'utilisateur de choisir le nom du fichier de sortie en html (se sera un tableau).
 # La commande echo permet d'afficher sur la console Cygwin
les informations contenues entre guillemets.

read tablo;
 
# Le nom que l'utilisateur a tapé sera contenu dans une variable nommée tablo.

echo "<html><head><title>tableau de liens</title></head><body><font face=Arial><table border=0 border=0 bordercolor=black><tr><th>Wget</th><th>Lynx</th><th>Egrep</th></tr>" > $tablo;
 
# Dans la variable $tablo (qui contient le nom du tableau html), on imprime ces balises html ainsi que
  #  le texte en-dehors des balises html. Ces balises vont permettre la mise en page du fichier html.
  # La commande echo permet d'imprimer les informations contenues entre guillemets, ici, ces informations
  # sont dirigées dans la variable $tablo.

for sens in `ls wget`
do
 
# La commande ls permet de lister le contenu d'un dossier, ainsi la commande ls wget va lister le contenu du dossier
  # wget que contiendra la variable sens. La variable sens aura comme valeur les différents noms des
  # dossiers de wget (c.-à-d. les différents sens du mot "barrage").
  # La boucle for...in permet d'appliquer à chaque sens contenu dans wget une série de commandes.
  # Pour chaque sens,

mkdir ./dump/$sens;
mkdir ./egrep/$sens;
 
# on crée dans les répertoires dump et egrep des sous-dossiers dont le nom est contenu dans la variable $sens.

echo "<tr><td bgcolor="#DDDDDD"><b>$sens</b></td><td bgcolor="#DDDDDD"></td><td bgcolor="#DDDDDD"></td></tr>" >> $tablo;
 
# Dans le fichier de sortie ($tablo), on imprime à la suite les informations contenues entre guillemets.
   # La commande echo suivie des doubles chevrons indique que les informations entre guillemets vont être
  # redirigées dans une variable, ici $tablo et rajoutées à la suite les unes aux autres.
for fic in `ls wget/$sens/*.htm*`
do
 
# La commande ls avec le paramètre wget/$sens/*.htm* permet de lister tous les fichiers ayant l'extension .html
  # ou .htm présents dans les dossiers $sens du répertoire wget. La variable fic aura
  # comme
 valeur cette liste. La boucle for...in va permettre l'application des commandes qui suivent à chaque
  # fichier
 listé ayant l'extension .html ou .htm.
  # Pour chaque fichier html ou htm,


echo $fic;
 
# on affiche sur la console la variable $fic qui contient l'adresse des fichier texte contenu dans
  # le répertoire wget.


lynx -dump $fic > $fic.txt
 
# La commande lynx avec l'option -dump va permettre de ne garder que le texte. Cette commande
  #  est utilisée sur les fichiers html contenus dans la variable $fic et les enregistrent avec l'extension .txt
  #  (texte seul).

mv $fic.txt ./dump/$sens/;
 # on déplace les fichiers texte contenant les résultats de lynx dans le répertoire dump et dans les
 # sous-dossiers $sens.


for fichier in `ls dump/$sens/*.txt`
do
 
# La commande ls avec le paramètre dump/$sens/*.txt permet de lister tous les fichiers ayant l'extension .txt
 # présents dans les dossiers $sens qui sont contenus dans le répertoire dump. La variable fichier aura
 # comme
 valeur cette liste. La boucle for va permettre l'application des commandes qui suivent à chaque
 # fichier
listé ayant l'extension .txt.
 # Pour chaque fichier texte,


echo $fichier;
 
# on affiche sur la console la variable $fichier qui contient l'adresse des fichier texte contenu dans
  # le répertoire dump.


egrep -i 'barrage' $fichier > $fichier.txt
 
# on applique la commande egrep avec l'option -i suivi du motif recherché et du fichier dans lequel
  # on cherche le motif. Le chevron fermant permet d'envoyer le résultat d'egrep dans un autre fichier
  # ayant l'extension .txt.

mv $fichier.txt ./egrep/$sens/;
 
# on déplace les fichiers texte contenant les résultats d'egrep dans le répertoire egrep et dans les
  # sous-dossiers $sens.

done
 # Fin de la boucle.


for fichierdump in `ls dump/$sens/*.txt`
do
 
# La commande ls avec le paramètre dump/$sens/*.txt permet de lister tous les fichiers ayant l'extension .txt
 # présents dans les dossiers $sens qui sont contenus dans le répertoire dump. La variable fichierdump aura
 # comme
 valeur cette liste. La boucle for...in va permettre l'application des commandes qui suivent à chaque
 # fichier
listé ayant l'extension .txt.

echo $fichierdump;
 
# on affiche sur la console la variable $fichierdump qui contient l'adresse des fichiers texte contenue dans
  # le répertoire dump.


done
 # Fin de la boucle.


for fichiereg in `ls egrep/$sens/*.txt`
do
 
# La commande ls avec le paramètre egrep/$sens/*.txt permet de lister tous les fichiers ayant l'extension .txt
 # présents dans les dossiers $sens qui sont contenus dans le répertoire egrep. La variable fichiereg aura
 # comme
 valeur cette liste. La boucle for...in va permettre l'application des commandes qui suivent à chaque
 # fichier
listé ayant l'extension .txt.

echo $fichiereg;
 
# on affiche sur la console la variable $fichiereg qui contient l'adresse des fichiers texte contenue dans
  # le répertoire d'egrep.


done
 
# Fin de la boucle.

echo "<tr><td><font size="2"><a href="$fic">$fic</a></font></td><td><font size="2"><a href="$fichierdump">$fichierdump</a></font></td><td><font size="2"><a href="$fichiereg">$fichiereg</a></font></td></tr>" >> $tablo;
 # On imprime à la suite du fichier de sortie $tablo les informations entre les guillemets.
  # La première colonne contient l'adresse de chaque fichier html présent dans la variable $fic avec le lien vers
  # cette même adresse.  Dans la deuxième colonne, on inscrit l'adresse de chaque fichier texte contenu
  # dans la variable $fichierdump avec le lien vers cette même adresse. Et enfin, dans la troisième colonne, on
  # note l'adresse de chaque fichier texte contenu dans la variable $fichiereg avec le lien vers celle-ci.

done
 # Fin de la boucle.
done
 
# Fin de la boucle.

echo "</table></font></body></html>" >> $tablo;
 
# On imprime à la suite dans le fichier de sortie les informations entre guillemets.