Contenu | Rechercher | Menus

Annonce

Le forum a une nouvelle maison !
Le forum a été migré sur un nouvel hébergement. Si jamais vous trouvez le moindre problème, n'hésitez pas à nous en faire part !
Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".

#1 Le 07/11/2012, à 15:57

hydro_90
Membre

test bash, afficher un fichier s'il contient un motif

Bonjour,

Je souhaite faire un script pour vérifier si ERREUR est présent dans deux fichiers.
Si c'est le cas il affiche le contenu du fichier ou des deux fichiers:
En gros si ERREUR est présent dans fichier1.txt il affiche le contenu de fichier1.txt, si ERREUR est présent dans fichier2.txt il affiche le contenu de fichier2.txt, si fichier1.txt et fichier2.txt contiennent ERREUR le contenu des deux fichiers sont affichés.

J'ai fait un truc comme ça mais ça marche pas bien, quelqu'un à une idée?

#!/bin/bash
VAR1=$(grep 'ERREUR' fichier1.txt)
VAR2=$(grep 'ERREUR' fichier2.txt)
if [ -n "$VAR1" ] ; then
cat fichier1.txt ;
else
if [ -n "$VAR2" ] ; then
cat fichier2.txt
else
exit 0
fi
fi

Merci par avance

edit modo : titre

Dernière modification par nesthib (Le 09/11/2012, à 18:05)

Hors ligne

#2 Le 07/11/2012, à 16:18

Postmortem
Membre

Re : test bash, afficher un fichier s'il contient un motif

Salut,

for fic in fichier1.txt fichier2.txt
do
   if grep -q "ERREUR" "$fic"
   then
      cat "$fic"
   fi
done

Trusty Tahr (64 bits)

Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#3 Le 07/11/2012, à 16:24

louis94
Membre

Re : test bash, afficher un fichier s'il contient un motif

Bonjour,

Ta syntaxe et ta manière d'écrire les if sont corrects, ce qui ne va pas, c'est la structure. La voici en pseudo-code :

si ERREUR dans fichier 1 :
   afficher fichier 1
sinon :
   si ERREUR dans fichier 2 :
       afficher fichier 2

Imaginons que ERREUR est présent dans les deux fichiers (c'est là que ça coince, non?). Alors ton premier test est vrai ; on affiche le contenu du premier fichier. On ne va par contre pas effectuer ce qu'il y a dans le else, donc même pas vérifier le deuxième if.

Voici un code fonctionnel :

#!/bin/bash
VAR1=$(grep 'ERREUR' fichier1.txt)
VAR2=$(grep 'ERREUR' fichier2.txt)
if [ -n "$VAR1" ] ; then
   cat fichier1.txt
fi
if [ -n "$VAR2" ] ; then
   cat fichier2.txt
fi

Louis

NB : Le "else if" de C/C++/Java/... s'écrit "elif" en Bash.

Hors ligne

#4 Le 08/11/2012, à 09:45

hydro_90
Membre

Re : test bash, afficher un fichier s'il contient un motif

Re, et merci pour votre aide; je vais tester tout ça aujourd'hui

Hors ligne

#5 Le 08/11/2012, à 11:50

hydro_90
Membre

Re : test bash, afficher un fichier s'il contient un motif

Ok ça marche bien avec le script :

for fic in fichier1.txt fichier2.txt
do
   if grep -q "ERREUR" "$fic"
   then
      cat "$fic"
   fi
done

Merci à vous

Hors ligne

#6 Le 08/11/2012, à 12:04

Postmortem
Membre

Re : test bash, afficher un fichier s'il contient un motif

Tu as gagné le droit de passer ce sujet en résolu ! wink


Trusty Tahr (64 bits)

Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#7 Le 09/11/2012, à 17:57

nesthib
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Re : test bash, afficher un fichier s'il contient un motif

Ça n'est pas exactement ce qui est demandé, mais perso je ferais :

grep -n -C100 fichier*

c'est tellement plus simple tongue

Hors ligne