Script shell

Résolu
Bonjour,

il me faudrait un script qui cherche une chaîne de caractères (y compris caractères spéciaux). je m'explique:

J'ai plusieurs répertoires avec plusieurs fichiers (.css .php .js .html) et je voudrais savoir par exemple dans quel fichier se trouve la chaîne : if (!$db->num_rows($result))

merci pour votre aide
--

L'expérience, c'est le nom que chacun donne à ses erreurs.
Oscar Wilde
Configuration: Linux Debian
Mozilla 1.8.1.10

14 réponses

  1. Modérateur
    Salut,

    Tout simplement en mettant l'expression entre quotes simples :
    fich2.txt
    blalo
    blub
    blibli
    blobla
    blybluble
    
    fich3.txt
    blala
    blab
    blibli
    blabla
    blablabla
    
    fich.txt
    blala
    blab
    if (!$db->num_rows($result))
    blabla
    blablabla
    
    [tmpfs]$ grep -Hn 'if (!$db->num_rows($result))' fich*
    fich.txt:3:if (!$db->num_rows($result))
    
    [tmpfs]$
    ;-))
    1. Contributeur
      merci jipicy, ta commande marche très bien (par contre je ne suis pas sur qu'elle cherche dans les sous répertoires) mais par exemple la commande
      grep -Hn 'if ($moderators)' * 

      ne marche pas..
      1. Modérateur
        Salut,
        rgrep -Hn 'if (!$db->num_rows($result))'  /repertoire_parent
        1. Modérateur
          pffffff, se suis trop nul ;-((((

          Merci ;-))
      2. Modérateur
        Ben chez moi elle marche bien :
        [tmpfs]$ cat fich2.txt
        blalo
        blub
        blibli
        bla if ($moderators) blu
        blobla
        blybluble
        
        [tmpfs]$ grep -Hn 'if ($moderators)' *
        fich2.txt:4:bla if ($moderators) blu
        
        [tmpfs]$
        Essaie de protéger le "$" avec un "\$"...

        Par contre pour la recherche récursive il te faudra passer par la commande "find" :
        find /répertoire -name "*" -exec grep -Hn 'if (!$db->num_rows($result))' {} \;
        ;-))
        1. Modérateur
          Salut,

          Par contre pour la recherche récursive il te faudra passer par la commande "find" :

          t'es fatigué ou quoi?! ;-))))
          man grep
          
          DESCRIPTION
                 grep  recherche dans les FICHIERs indiqués les lignes correspondant à un certain MOTIF. Par défaut, grep affiche les lignes qui con-
                 tiennent une correspondance au motif. L'entrée standard est lue si FICHIER est omis ou si FICHIER vaut « - ».
          
                 Trois variantes du programme sont disponibles : egrep, fgrep et rgrep ; egrep est identique à grep -E, fgrep est identique à grep -F
                 et rgrep est identique à grep -r.
          
          
          
                 -R, -r, --recursive
                        Lire récursivement tous les fichiers à l'intérieur de chaque répertoire. C'est l'équivalent de l'option -d recurse.

          1. Modérateur
            Ben non, je joue au "perlien", la flemme de taper "man grep", c'est tout ;-DDD
        2. Contributeur
          voila l'extrait un des fihiers:
          if ($cur_forum['moderators'] != '')
          
          	{
          
          		$mods_array = unserialize($cur_forum['moderators']);
          
          		$moderators = array();
          
          
          
          		while (list($mod_username, $mod_id) = @each($mods_array))
          
          			$moderators[] = '<a href="profile.php?id='.$mod_id.'">'.pun_htmlspecialchars($mod_username).'</a>';
          
          
          
          		$moderators = "\t\t\t\t\t\t\t\t".'<p><em>('.$lang_common['Moderated by'].'</em> '.implode(', ', $moderators).')</p>'."\n";
          
          	}
          
          
          
          ?>


          La commande que j'utilise:
          find /home/aruju/Desktop/abc/ -name "*" -exec grep -Hn 'if ($moderators)' {} \;


          Puis ca ne marche pas.. (même avec l'antislache)

          P.S la commande de lami20j ne marche pas non plus

          1. Modérateur
            Eh dis donc ! et ça "if ($cur_forum['moderators'] != '')" c'est loin de ressembler à "if ($moderators)' !!!

            Pas compliqué que tu ne trouves rien ;-((
            1. Modérateur
              je ne vois pas le motif que tu cherches dans ton extrait
              1. Contributeur
                ok ok ne me tapez pas :-) Et si par exemple je sais que dans la chaîne il y a "moderators" (plus tout les caractères spéciaux que je ne connais pas) et je veut qu'il me trouve tout les lignes contenant par exemple "$moderators" "<moderators" "['moderators" etc et ce dans tous les rep et sou rep

                EDIT et puisque c'est commença même pas je vais mettre "resolu" :-)
                1. Modérateur
                  ou plutôt
                  rgrep -Hn ' [^a-zA-Z]moderators' /repertoire_parent

                  mais ce n'est pas optimal
                  1. Modérateur
                    tu peux faire comme ça
                    dans la partie en gras tu peux ajouter tous les caractères spéciaux, mais à la fin, surtout pas avant le - qui doit rester en 1ère position
                     rgrep -EHn '([-$<>\[}{=;,#|]|])moderators' *