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. 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 !
    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 !!!
      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).
    2. 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

      :-)
      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

        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
          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 !
            1. Contributeur
              et
              toto="0 * * * * /home/thierry/cron.sh" && grep "${toto}" /home/crontabs/site/spool/local/formation/thierry
              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 !

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