Recherche Occurences dans des fichiers

Recherche Occurences dans des fichiers - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 12-09-2007 à 11:23:03    

bonjour n'etant pas un pro du shell, je n'arrive pas à trouver pourquoi le script suivant ne fonctionne pas.
 
Le but :  rechercher (et lister) dans un repertoire certaines occurences contenues dans des fichiers. Les occurences trouvées sont stockées dans un fichier (occurence.txt)
 
 
voici le script :
 
#!/bin/sh
#
cd  /opt/lesfichiers
for MONFIC in `cat /opt/mesoccurences.txt`
do
     echo $MONFIC
     grep -l $MONFIC *
     RC=$?
     echo $RC
     if [ $RC -eq 0 ]
     then
       echo $MONFIC >> /opt/trouve.txt
     else
       echo $MONFIC >> /opt/pastrouve.txt
     fi
done
 
####################
 
 
le soucis est que ce scripts ne me trouve aucune occurence alors que je sais (en lançant à la main le grep) qu'il y en a.
 
 
Pourriez-vous me dire ou se trouve l'erreur ?.
 
Merci d'avance,
Vegas.
 
 
 
 


---------------
Les cons, ça ose tout, et c'est même à ça qu'on les reconnait....
Reply

Marsh Posté le 12-09-2007 à 11:23:03   

Reply

Marsh Posté le 12-09-2007 à 18:50:38    

rajoute un set -x en début de script pour avoir du debug.
 
Je dirais, à première vue : soit il trouve pas le fichier sur lequel il doit faire le grep, soit la regexp est mal interprêtée (penser à l'option -e)

Reply

Marsh Posté le 12-09-2007 à 19:14:27    

ce qui est etonnant, quand je met le mode debug :  
la ligne grep est en fait :
 
grep -l $'occurence1\r' fichier1.txt
 
et pas  
 
grep -l occurence1 fichier1.txt
 


---------------
Les cons, ça ose tout, et c'est même à ça qu'on les reconnait....
Reply

Marsh Posté le 12-09-2007 à 19:16:12    

parce que dans ton fichier /opt/mesoccurences.txt chaque fin ligne est symbolisée par un '\r'


---------------
Relax. Take a deep breath !
Reply

Marsh Posté le 12-09-2007 à 20:24:14    

non justement dans mon fichier occurence les mots sont placés les uns sous les autres :
 
tutu
titi
..
..
..
toto
tata
 
il n'y a pas de /r


---------------
Les cons, ça ose tout, et c'est même à ça qu'on les reconnait....
Reply

Marsh Posté le 12-09-2007 à 20:31:16    

C'est bien ce que je dit... :heink:

 

'\r' est le caractère RETOUR CHARIOT. Généralement sous unix on utilise seulement \n pour signaler un retour à la ligne. Seulement sous certaines applications (généralement sous windows) il y a 2 caractères : \r   ET  \n. \r pour indiquer que le chariot retourne au début de la ligne et \n pour indiquer qu'on passe a la ligne suivante. Sous unix généralement on a seulement \n => on passe a la ligne suivante et on retourne au début de la ligne

 

Je veux dire par la que dans ton fichier pour signaler la fin de la ligne tu as \r \n à chaque fin de ligne. le read détecte le \n pour la fin de ligne et donc l'omet quand il le passe à ta variable mais \r est pour lui un caractère classique.
ton fichier est en fait
tutu\r\n
titi\r\n
...\r\n
toto\r\n

 

tu n'as qu'a faire un hexdump de ton fichier pour voir TOUS les caractères. à la place des \r\n tu auras 0x0D  0x0A   à chaque fin de ligne

 


Table ASCII   Retour à la ligne

 

La solution est d'enlever tous les \r qui ne servent à rien. Tu as plusieurs technique. Un coup de sed ou un coup de dos2unix


Message édité par o'gure le 12-09-2007 à 20:50:15

---------------
Relax. Take a deep breath !
Reply

Marsh Posté le 13-09-2007 à 15:15:05    

Merci beaucoup.
 
tu m'as bien depanné.
 


---------------
Les cons, ça ose tout, et c'est même à ça qu'on les reconnait....
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed