Contenu | Rechercher | Menus

Annonce

Ubuntu-fr.org recrute toujours de nouveaux modérateurs, avec de l'expérience.

Ubuntu 16.04 LTS
Réservez vos DVD et clé USB Ubuntu-fr (premières livraisons mi-mai)

Si vous avez des soucis pour rester connecté, déconnectez vous et reconnectez vous depuis ce lien en cochant le case
Me connecter automatiquement lors de mes prochaines visites.

M.A.J. en cours du forum possibilité de bug, nous faisons le maximum pour les résoudre au plus vite

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

hydro_90

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, à 19:05)

Hors ligne

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

Postmortem

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, à 17:24

louis94

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, à 10:45

hydro_90

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, à 12:50

hydro_90

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, à 13:04

Postmortem

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, à 18:57

nesthib

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


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne