Problème grep

Résolu
tlep Messages postés 597 Statut Membre -  
tlep Messages postés 597 Statut Membre -
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

:-()
Configuration: Windows XP
Firefox 2.0.0.9

13 réponses

  1. c-moi Messages postés 82 Statut Membre 10
     
    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
  2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    qu'affiche :
    toto="1 * * * * /home/thierry/cron.sh" ; echo $?
    toto="* * * * /home/thierry/cron.sh" : echo $?
    puisque que c'est ce que teste &&
    0
  3. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,
    toto="1 * * * * /home/thierry/cron.sh" && grep "${toto}" /home/crontabs/site/spool/local/formation/thierry
    ;-))
    0
  4. tlep Messages postés 597 Statut Membre 118
     
    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
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    et
    toto="0 * * * * /home/thierry/cron.sh" && grep "${toto}" /home/crontabs/site/spool/local/formation/thierry
    0
  7. tlep Messages postés 597 Statut Membre 118
     
    Pareil avec 0 !
    0
  8. tlep Messages postés 597 Statut Membre 118
     
    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
  9. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    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
  10. tlep Messages postés 597 Statut Membre 118
     
    Ce sont des espaces, et pas des tabulations.
    0
  11. detendu Messages postés 4 Statut Membre
     
    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
  12. tlep Messages postés 597 Statut Membre 118
     
    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
  13. tlep Messages postés 597 Statut Membre 118
     
    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
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      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
  14. tlep Messages postés 597 Statut Membre 118
     
    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