Problème grep

Résolu
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. 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
    1. Contributeur
      qu'affiche :
      toto="1 * * * * /home/thierry/cron.sh" ; echo $?
      toto="* * * * /home/thierry/cron.sh" : echo $?
      puisque que c'est ce que teste &&
      0
      1. Modérateur
        Salut,
        toto="1 * * * * /home/thierry/cron.sh" && grep "${toto}" /home/crontabs/site/spool/local/formation/thierry
        ;-))
        0
        1. 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. Modérateur
            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
        2. Contributeur
          et
          toto="0 * * * * /home/thierry/cron.sh" && grep "${toto}" /home/crontabs/site/spool/local/formation/thierry
          0
          1. 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
            1. Contributeur
              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
              1. Ce sont des espaces, et pas des tabulations.
                0
                1. 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
                  1. 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
                    1. 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. Modérateur
                        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
                    2. 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