Recherche Occurences dans des fichiers - Codes et scripts - Linux et OS Alternatifs
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)
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
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'
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
Marsh Posté le 12-09-2007 à 20:31:16
C'est bien ce que je dit...
'\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
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
Marsh Posté le 13-09-2007 à 15:15:05
Merci beaucoup.
tu m'as bien depanné.
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....