Vérifier la présence d'un mot dans une ligne
Résolu/Fermé
Decon
Messages postés
91
Date d'inscription
mercredi 29 août 2007
Statut
Membre
Dernière intervention
8 octobre 2014
-
3 mai 2011 à 18:28
Decon Messages postés 91 Date d'inscription mercredi 29 août 2007 Statut Membre Dernière intervention 8 octobre 2014 - 5 mai 2011 à 14:52
Decon Messages postés 91 Date d'inscription mercredi 29 août 2007 Statut Membre Dernière intervention 8 octobre 2014 - 5 mai 2011 à 14:52
A voir également:
- Vérifier la présence d'un mot dans une ligne
- Verifier un lien - Guide
- Aller à la ligne dans une cellule excel - Guide
- Vérifier mot de passe compromis - Guide
- Partager photos en ligne - Guide
- Site de vente en ligne particulier - Guide
11 réponses
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 418
3 mai 2011 à 18:46
3 mai 2011 à 18:46
Salut,
Mais bon, ça reste très schématique et sûrement pas adapté à 100% à ton cas ;-((
while read ligne do grep -q 'motif' <<<${line} if [ "$?" -eq "0" ] then blablabla else blablabla fi done < fichier
Mais bon, ça reste très schématique et sûrement pas adapté à 100% à ton cas ;-((
Decon
Messages postés
91
Date d'inscription
mercredi 29 août 2007
Statut
Membre
Dernière intervention
8 octobre 2014
2
4 mai 2011 à 09:50
4 mai 2011 à 09:50
J'ai une erreur à chaque fois.[CODE]syntax error at line n°: '<' unexpected[/CODE]
C'est un script sh que j'exécute.
C'est un script sh que j'exécute.
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 418
4 mai 2011 à 09:53
4 mai 2011 à 09:53
Désolé mais j'ai perdu ma boule de cristal ;-((
Sans voir le code difficile de faire quoi que ce soit ;-\
Sans voir le code difficile de faire quoi que ce soit ;-\
Decon
Messages postés
91
Date d'inscription
mercredi 29 août 2007
Statut
Membre
Dernière intervention
8 octobre 2014
2
Modifié par Decon le 4/05/2011 à 10:15
Modifié par Decon le 4/05/2011 à 10:15
Désolé, voici le code:
Aussi, est-ce possible de mettre le grep à l'intérieur du if, parce que j'ai l'impression que le code actuel me permet de tester la présence que d'un mot; alors que je veux en tester plusieurs avec pour chacun une action spéciale.
#liste les logs du plus recent au plus ancien find /InstancesArbor/CATDEV3/KBP_APPLI/y/log \( -name 'Nom.0.2-29*.*.log' -o -name 'Nom.0.2-3[0-9]*.*.log' \) -ls | grep -v 'Nom.0.2-29.core_bp_duct_educt.*.log' | sort -r -n -t. +3 > tmp.file while read ligne do grep -q 'Nom.0.2-29.2*.log' <<<${line} if [ "$?" -eq "0" ] then echo "blabla" fi done < tmp.file
Aussi, est-ce possible de mettre le grep à l'intérieur du if, parce que j'ai l'impression que le code actuel me permet de tester la présence que d'un mot; alors que je veux en tester plusieurs avec pour chacun une action spéciale.
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 418
4 mai 2011 à 10:17
4 mai 2011 à 10:17
Et que contient "tmp.file" ???
Déjà à 1ère vue, la présence de l'astérisque dans le motif de recherche ne me parait pas du meilleur goût, ne serait-ce que par la présence de quotes simples autour du motif et de l'absence de l'option "-E" de grep ;-((
Déjà à 1ère vue, la présence de l'astérisque dans le motif de recherche ne me parait pas du meilleur goût, ne serait-ce que par la présence de quotes simples autour du motif et de l'absence de l'option "-E" de grep ;-((
Decon
Messages postés
91
Date d'inscription
mercredi 29 août 2007
Statut
Membre
Dernière intervention
8 octobre 2014
2
Modifié par Decon le 4/05/2011 à 10:31
Modifié par Decon le 4/05/2011 à 10:31
tmp.file contient :
J'ai mis -Eq et "" à la place de '', j'ai un message: Illégale option -E , -q
-rw-rw-r-- 1 arbdev3 arboradm 7679 May 2 11:53 Nom.0.2-30.20110502.115217.log -rwxr-xr-x 1 arbdev3 arboradm 15647 May 2 11:45 Nom.0.2-29.20110502.114254.log -rwxr-xr-x 1 arbdev3 arboradm 15698 May 2 11:01 Nom.0.2-29.20110502.105858.log -rwxr-xr-x 1 arbdev3 arboradm 3622 Apr 29 17:31 Nom.0.2-30.20110429.173020.log -rwxr-xr-x 1 arbdev3 arboradm 13596 Apr 14 13:05 Nom.0.2-29.20110414.130358.log -rwxr-xr-x 1 arbdev3 arboradm 5650 Apr 14 13:02 Nom.0.2-30a.20110414.130157.log -rwxr-xr-x 1 arbdev3 arboradm 5636 Apr 14 13:01 Nom.0.2-30.20110414.130115.log
J'ai mis -Eq et "" à la place de '', j'ai un message: Illégale option -E , -q
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 418
4 mai 2011 à 10:32
4 mai 2011 à 10:32
Le but c'est de matcher ces trois lignes :
Nom.0.2-29.20110502.114254.log
Nom.0.2-29.20110502.105858.log
Nom.0.2-29.20110414.130358.log
Nom.0.2-29.20110502.114254.log
Nom.0.2-29.20110502.105858.log
Nom.0.2-29.20110414.130358.log
Decon
Messages postés
91
Date d'inscription
mercredi 29 août 2007
Statut
Membre
Dernière intervention
8 octobre 2014
2
4 mai 2011 à 10:44
4 mai 2011 à 10:44
Non, le but est de parcourir le fichier et pour chaque ligne, vérifier si elle contient 29, excécuter la tâche correspondant à 29, si 30 ..., si 29a .., 30a .., ainsi de suite.
ces n° étant les chiffres juste avant la date.
ces n° étant les chiffres juste avant la date.
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 418
4 mai 2011 à 11:06
4 mai 2011 à 11:06
Dans ton exemple (grep -q 'Nom.0.2-29.2*.log') le but était bien de matche les 3 lignes sus-citées quand même non ? ;-\
Donc à partir de là :
etc.
;-))
Donc à partir de là :
$ egrep 'Nom.0.2-29.*.log' plop -rwxr-xr-x 1 arbdev3 arboradm 15647 May 2 11:45 Nom.0.2-29.20110502.114254.log -rwxr-xr-x 1 arbdev3 arboradm 15698 May 2 11:01 Nom.0.2-29.20110502.105858.log -rwxr-xr-x 1 arbdev3 arboradm 13596 Apr 14 13:05 Nom.0.2-29.20110414.130358.log $ egrep 'Nom.0.2-30.*.log' plop -rw-rw-r-- 1 arbdev3 arboradm 7679 May 2 11:53 Nom.0.2-30.20110502.115217.log -rwxr-xr-x 1 arbdev3 arboradm 3622 Apr 29 17:31 Nom.0.2-30.20110429.173020.log -rwxr-xr-x 1 arbdev3 arboradm 5650 Apr 14 13:02 Nom.0.2-30a.20110414.130157.log -rwxr-xr-x 1 arbdev3 arboradm 5636 Apr 14 13:01 Nom.0.2-30.20110414.130115.log $
etc.
;-))
Decon
Messages postés
91
Date d'inscription
mercredi 29 août 2007
Statut
Membre
Dernière intervention
8 octobre 2014
2
4 mai 2011 à 11:16
4 mai 2011 à 11:16
je vois ce que tu veux dire; mais les lignes du fichier tmp.file sont déjà dans un certains ordre et l'exécution des tâches associées à chaque ligne doit se faire dans ce même ordre. C'est pour cela que je ne souhaite pas ramener toutes les lignes contenant 29, puis 30, ..
Ce que je veux faire c'est de parcourir dans l'odre le fichier et exécuter les tâches dans ce même ordre.
J'espère avoir été un peu plus clair.
Ce que je veux faire c'est de parcourir dans l'odre le fichier et exécuter les tâches dans ce même ordre.
J'espère avoir été un peu plus clair.
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 418
4 mai 2011 à 11:35
4 mai 2011 à 11:35
Ok. Un exemple avec dans le fichier "plop" le contenu de ton exemple plus haut...
$ cat foo.sh #! /bin/bash while read line do A=$(egrep -o '\.2-..' <<<${line}) case ${A} in .2-29) echo "${line##* } contient 29" ;; .2-30) echo "${line##* } contient 30" ;; esac done < plop $ ./foo.sh Nom.0.2-30.20110502.115217.log contient 30 Nom.0.2-29.20110502.114254.log contient 29 Nom.0.2-29.20110502.105858.log contient 29 Nom.0.2-30.20110429.173020.log contient 30 Nom.0.2-29.20110414.130358.log contient 29 Nom.0.2-30a.20110414.130157.log contient 30 Nom.0.2-30.20110414.130115.log contient 30 $
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Decon
Messages postés
91
Date d'inscription
mercredi 29 août 2007
Statut
Membre
Dernière intervention
8 octobre 2014
2
4 mai 2011 à 11:51
4 mai 2011 à 11:51
Merci de ton aide,
En revanche, es tu sûr que ça fonctionne de la même manière en bin/sh, parce que j'ai le message d'erreur:
Voici mon code complet
En revanche, es tu sûr que ça fonctionne de la même manière en bin/sh, parce que j'ai le message d'erreur:
syntax error at line 32: 'A=$' unexpected
Voici mon code complet
#!/bin/sh #Vérification des patchs installés #***************************************************** #liste les logs du plus recent au plus ancien find /InstancesArbor/CATDEV3/KBP_APPLI/y/log \( -name 'Nom.0.2-29*.*.log' -o -name 'Nom.0.2-3[0-9]*.*.log' \) -ls | grep -v 'Nom.0.2-29.core_bp_duct_educt.*.log' | sort -r -n -t. +3 > tmp.file while read line do A=$(egrep -o '\.2-..' <<<${line}) case ${A} in .2-29) echo "${line##* } contient 29" ;; .2-30) echo "${line##* } contient 30" ;; esac done < tmp.file
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 418
4 mai 2011 à 12:07
4 mai 2011 à 12:07
Sur quel système es-tu ?
Ou quelle distrib ?
Que renvoie la commande :
Ou quelle distrib ?
Que renvoie la commande :
ls -l /bin/sh
Decon
Messages postés
91
Date d'inscription
mercredi 29 août 2007
Statut
Membre
Dernière intervention
8 octobre 2014
2
4 mai 2011 à 12:50
4 mai 2011 à 12:50
lrwxrwxrwx 1 root root 13 Jan 6 2009 /bin/sh -> ../../sbin/sh
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 418
4 mai 2011 à 13:02
4 mai 2011 à 13:02
Et les réponses aux 2 questions ?
Decon
Messages postés
91
Date d'inscription
mercredi 29 août 2007
Statut
Membre
Dernière intervention
8 octobre 2014
2
Modifié par Decon le 4/05/2011 à 13:13
Modifié par Decon le 4/05/2011 à 13:13
Unix, SunOS 5.10
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 418
4 mai 2011 à 13:20
4 mai 2011 à 13:20
Ok.
Essaie de remplacer "A=$(egrep -o '\.2-..' <<<${line})" par :
Essaie de remplacer "A=$(egrep -o '\.2-..' <<<${line})" par :
A=$(echo "${line}" | egrep -o '\.2-..' )
Decon
Messages postés
91
Date d'inscription
mercredi 29 août 2007
Statut
Membre
Dernière intervention
8 octobre 2014
2
4 mai 2011 à 13:32
4 mai 2011 à 13:32
Je l'ai testé et j'ai la même erreur.
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 418
4 mai 2011 à 13:38
4 mai 2011 à 13:38
Tu peux rajouter "set -xv" après ton shebang, lancer le script et afficher la sortie s'il te plait, merci ;-))
#!/bin/sh set -xv
Decon
Messages postés
91
Date d'inscription
mercredi 29 août 2007
Statut
Membre
Dernière intervention
8 octobre 2014
2
4 mai 2011 à 13:39
4 mai 2011 à 13:39
D'accord
Decon
Messages postés
91
Date d'inscription
mercredi 29 août 2007
Statut
Membre
Dernière intervention
8 octobre 2014
2
4 mai 2011 à 13:45
4 mai 2011 à 13:45
find /InstancesArbor/CATDEV3/KBP_APPLI/y/log \( -name 'Nom.0.2-29*.*.log' -o -name 'Nom.0.2-3[0-9]*.*.log' \) -ls | grep -v 'Nom.0.2-29.core_bp_duct_educt.*.log' | sort -r -n -t. +3 > tmp.file + find /InstancesArbor/CATDEV3/KBP_APPLI/y/log ( -name Nom.0.2-29*.*.log -o+ -namesort Nom.0.2-3[0-9]*.*.log ) -r -ls+ -n grep -t.-v +3NEUF_TELECOM_CEG_ENT_BP12.0.2-29.core_bp_duct_educt.*.log while read line do #A=$(grep -o '\.2-..' <<<${line}) A=$(etest.sh: syntax error at line 9: 'A=$' unexpected
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 418
4 mai 2011 à 13:49
4 mai 2011 à 13:49
Bon, on va essayer autrement ;-\
Remplace "A=$(echo "${line}" | egrep -o '\.2-..' )" par :
Attention c'est des quotes-inversées (Alt Gr + 7 le 7 du clavier alphanumérique)
Remplace "A=$(echo "${line}" | egrep -o '\.2-..' )" par :
A='echo "${line}" | egrep -o '\.2-..''
Attention c'est des quotes-inversées (Alt Gr + 7 le 7 du clavier alphanumérique)
Decon
Messages postés
91
Date d'inscription
mercredi 29 août 2007
Statut
Membre
Dernière intervention
8 octobre 2014
2
4 mai 2011 à 13:57
4 mai 2011 à 13:57
Le message d'erreur a changé. Maintenant j'ai:
egrep: illegal option -- o usage: egrep [ -bchilnsv ] [ -e exp ] [ -f file ] [ strings ] [ file ] ...
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 418
4 mai 2011 à 14:07
4 mai 2011 à 14:07
Ok.
Essayons comme ça :
Essayons comme ça :
#! /bin/bash while read line do A='echo ${line} | egrep '\.2-..'' case ${A##*-} in 29*) echo "${line##* } contient 29" ;; 30*) echo "${line##* } contient 30" ;; esac done <tmp.file
Decon
Messages postés
91
Date d'inscription
mercredi 29 août 2007
Statut
Membre
Dernière intervention
8 octobre 2014
2
Modifié par Decon le 4/05/2011 à 14:31
Modifié par Decon le 4/05/2011 à 14:31
Je l'ai fais. Il me renvoie l'erreur "bas substitition" quand je le fais sous bin/sh; mais en mettant bin/bash, ça marche.
Suis je obligé de le faire sous bash, Parce qu'en réalité, mon script est beaucoup plus long et le reste s'exécute avec sh.
Suis je obligé de le faire sous bash, Parce qu'en réalité, mon script est beaucoup plus long et le reste s'exécute avec sh.
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 418
4 mai 2011 à 14:41
4 mai 2011 à 14:41
"bad substitution"
Faudrait savoir ce qu'il n'aime pas ;-\
A mon avis c'est les "${A##*-}" et les "${line##* }"
Essaie comme ça :
Faudrait savoir ce qu'il n'aime pas ;-\
A mon avis c'est les "${A##*-}" et les "${line##* }"
Essaie comme ça :
#! /bin/sh while read line do A='echo ${line} | egrep '\.2-..'' A='echo ${A} | awk -F'-' '{print $NF}'' case ${A} in 29*) echo "${line} contient 29" ;; 30*) echo "${line} contient 30" ;; esac done <tmp.file
Decon
Messages postés
91
Date d'inscription
mercredi 29 août 2007
Statut
Membre
Dernière intervention
8 octobre 2014
2
4 mai 2011 à 14:53
4 mai 2011 à 14:53
Ca marche!!!
SUPER MERCI.
T'es trop sympa.
Je ne sais pas comment te dire merci; mais MERCi tout simplement.
SUPER MERCI.
T'es trop sympa.
Je ne sais pas comment te dire merci; mais MERCi tout simplement.
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 418
4 mai 2011 à 16:11
4 mai 2011 à 16:11
De rien ;-))
Decon
Messages postés
91
Date d'inscription
mercredi 29 août 2007
Statut
Membre
Dernière intervention
8 octobre 2014
2
Modifié par Decon le 5/05/2011 à 13:54
Modifié par Decon le 5/05/2011 à 13:54
Bonjour,
Je reviens suite à un problème de EOF que je rencontre; notament le message suivant lors du parcours de mon fichier par le read line:
Je reviens suite à un problème de EOF que je rencontre; notament le message suivant lors du parcours de mon fichier par le read line:
** ERROR ** EOF encountered while reading standard in. Now exiting...
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 418
5 mai 2011 à 13:57
5 mai 2011 à 13:57
Affiche ton code ainsi que le contenu de ton fichier tmp.file. (si confidentiel, tu peux mettre les fichiers sur ci-joint et m'envoyer l'adresse par MP)
Decon
Messages postés
91
Date d'inscription
mercredi 29 août 2007
Statut
Membre
Dernière intervention
8 octobre 2014
2
Modifié par Decon le 5/05/2011 à 14:27
Modifié par Decon le 5/05/2011 à 14:27
On fait comment pour envoyer des fichiers joints?
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 418
5 mai 2011 à 14:26
5 mai 2011 à 14:26
Decon
Messages postés
91
Date d'inscription
mercredi 29 août 2007
Statut
Membre
Dernière intervention
8 octobre 2014
2
5 mai 2011 à 14:39
5 mai 2011 à 14:39
Je ne trouve pas l'onglet message privé sur ton profil
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 418
5 mai 2011 à 14:44
5 mai 2011 à 14:44
Oups il était désactivé ;-(
Ça devrait être bon ;-))
Ça devrait être bon ;-))