Problème grep

Résolu/Fermé
tlep Messages postés 596 Date d'inscription jeudi 21 février 2002 Statut Membre Dernière intervention 25 octobre 2012 - 7 nov. 2007 à 09:53
tlep Messages postés 596 Date d'inscription jeudi 21 février 2002 Statut Membre Dernière intervention 25 octobre 2012 - 8 nov. 2007 à 14:29
Bonjour,

j'ai un souci avec grep, qui ne trouve pas un motif existant :

toto="1 * * * * /home/thierry/cron.sh" && grep "$toto" /home/crontabs/site/spool/local/formation/thierry

Sachant que /home/crontabs/site/spool/local/formation/thierry contient bien la ligne "1 * * * * /home/thierry/cron.sh".

Par contre si je fais
toto=" * * * * /home/thierry/cron.sh" && grep "$toto" /home/crontabs/site/spool/local/formation/thierry
il me trouve bien :

1 * * * * /home/thierry/cron.sh

:-()

13 réponses

c-moi Messages postés 81 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 6 juillet 2011 10
7 nov. 2007 à 10:34
Bonjour,

Déjà, vérifie ta variable toto :

echo $toto

Il se peut que tes astérisques soient interprétées dans le cas où des fichiers existent dans le répertoire où tu as affecté la variable toto.

Bonne investigation,

c-moi
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
7 nov. 2007 à 11:05
qu'affiche :
toto="1 * * * * /home/thierry/cron.sh" ; echo $?
toto="* * * * /home/thierry/cron.sh" : echo $?
puisque que c'est ce que teste &&
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
7 nov. 2007 à 12:02
Salut,
toto="1 * * * * /home/thierry/cron.sh" && grep "${toto}" /home/crontabs/site/spool/local/formation/thierry
;-))
0
tlep Messages postés 596 Date d'inscription jeudi 21 février 2002 Statut Membre Dernière intervention 25 octobre 2012 118
7 nov. 2007 à 12:59
Ben nan jipicy, pour une fois c'est pas ca :

toto=" * * * * /home/thierry/cron.sh" && grep "${toto}" /home/crontabs/site/spool/local/formation/thierry
1 * * * * /home/thierry/cron.sh

toto="1 * * * * /home/thierry/cron.sh" && grep "${toto}" /home/crontabs/site/spool/local/formation/thierry
=> rien !

:-()
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
7 nov. 2007 à 16:42
Désolé j'ai pas eu le temps de tester ce matin, essaie ça, inspiré de la soluce plus bas donnéepar de ton collègue :
 grep "${toto//\*/\*}" fichier
;-))
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
7 nov. 2007 à 14:00
et
toto="0 * * * * /home/thierry/cron.sh" && grep "${toto}" /home/crontabs/site/spool/local/formation/thierry
0
tlep Messages postés 596 Date d'inscription jeudi 21 février 2002 Statut Membre Dernière intervention 25 octobre 2012 118
7 nov. 2007 à 14:12
Pareil avec 0 !
0
tlep Messages postés 596 Date d'inscription jeudi 21 février 2002 Statut Membre Dernière intervention 25 octobre 2012 118
7 nov. 2007 à 14:21
J'ajoute "0 * * * * /home/thierry/cron.sh" dans /home/crontabs/site/spool/local/formation/thierry puis :

toto=" * * * * /home/thierry/cron.sh" && grep "${toto}" /home/crontabs/site/spool/local/formation/thierry
1 * * * * /home/thierry/cron.sh
0 * * * * /home/thierry/cron.sh

toto="0 * * * * /home/thierry/cron.sh" && grep "${toto}" /home/crontabs/site/spool/local/formation/thierry
=> rien !
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
7 nov. 2007 à 14:51
est-ce que c'est 1<espace> dans toto et 1<tab> dans le fichier ?
cat -v /home/crontabs/site/spool/local/formation/thierry
0
tlep Messages postés 596 Date d'inscription jeudi 21 février 2002 Statut Membre Dernière intervention 25 octobre 2012 118
7 nov. 2007 à 14:56
Ce sont des espaces, et pas des tabulations.
0
detendu Messages postés 4 Date d'inscription mardi 18 septembre 2007 Statut Membre Dernière intervention 7 avril 2008
7 nov. 2007 à 14:58
salut Thierrytte,

il suffit de faire ça

toto="1 \* \* \* \* /home/thierry/cron.sh" && grep "$toto" /home/crontabs/site/spool/local/formation/thierry

explication:
les étoiles sont interprété comme de 0 à n fois le caractère espace et non comme des étoiles.


voila

0
tlep Messages postés 596 Date d'inscription jeudi 21 février 2002 Statut Membre Dernière intervention 25 octobre 2012 118
7 nov. 2007 à 15:08
Bien joué ;-)

Là ou çà se complique, c'est que le contenu de ma variable $toto est issue d'un scan de fichier, dont je cherche les occurences de chaque ligne complète dans un autre fichier

Genre :

while read Ligne;do
grep "^$Ligne$" $Spool_Local/$Hosts/$Files || echo "$Ligne: Non trouvé"
done < $Spool_Distant/$Hosts/$Files

:-)
0
tlep Messages postés 596 Date d'inscription jeudi 21 février 2002 Statut Membre Dernière intervention 25 octobre 2012 118
8 nov. 2007 à 12:14
grep "${toto//\*/\*}" fichier ca fonctionne;

Mais est-ce que je ne risque pas encore de tomber sur d'autres caractères qui posent problème à part "*", en passant en variablechaque ligne de mon fichier source ?

PS: c'est quoi cette syntaxe sur grep ? c'est la première fois que je la vois !!!
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
8 nov. 2007 à 12:22
PS: c'est quoi cette syntaxe sur grep ? c'est la première fois que je la vois !!!
C'est pas propre à "grep" mais au shell (bash en l'occurrence) et plus particulièrement à l'expansion des paramètres, voir "man bash" (entre autre le chapitre Expansion et sa section Remplacement des paramètres).
0
tlep Messages postés 596 Date d'inscription jeudi 21 février 2002 Statut Membre Dernière intervention 25 octobre 2012 118
8 nov. 2007 à 14:29
Ah ben c'était trop simple:

man grep

-F Interprète le motif comme une liste de chaînes
figées, séparées par des Sauts de Lignes (NewLine).
La correspondance est faite avec n'importe laquelle
de ces chaînes.

(ou fgrep)

Merci à tous !
0