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
    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' *

    1. Modérateur
      ou plutôt
      rgrep -Hn ' [^a-zA-Z]moderators' /repertoire_parent

      mais ce n'est pas optimal
      1. Modérateur
        essaie
        rgrep -Hn '[^a-zA-Z]moderators' /repertoire_parent
        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
            je ne vois pas le motif que tu cherches dans ton extrait
            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. 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
                  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. 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,
                    rgrep -Hn 'if (!$db->num_rows($result))'  /repertoire_parent
                    1. Modérateur
                      pffffff, se suis trop nul ;-((((

                      Merci ;-))
                  2. 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,

                      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]$
                      ;-))