Script bash de recherche

Bonjour,

j'aimerai ecrire un script bash qui me permet de rechercher un mot clé dans une liste de fichiers d'un repertoire de façon à pouvoir ajouter derriere une directive.

en gros je voudrai pouvoir faire ça :

Je cherche le mot clé COMMON dans une liste de fichier, lorsque je trouve une occurence, j'ouvre le fichier, je recupere le nom de la variable LISTE

 COMMON /LISTE/ VARIABLE 


Pour ensuite ajouter une phrase où je declare cette LISTE comme ThreadPrivate :

  
COMMON /LISTE/ VARIABLE  
C$OMP THREADPRIVATE (LISTE) 


Je suis nul en script et j'aimerai savoir si vous pourriez me donner une piste

3 réponses

  1. Contributeur
    Salut,

    rechercher un mot clé dans une liste de fichiers d'un repertoire
    Faut-il aussi chercher dans les sous-répertoires ou pas ?

    lorsque je trouve une occurence, j'ouvre le fichier, je recupere le nom de la variable LISTE
    Elle est où cette variable par rapport au mot-clé ?

    Pour ensuite ajouter une phrase où je declare cette LISTE comme ThreadPrivate :
    Cette ligne doit être rajoutée où exactement ?

    Merci de poster un exemple de fichier AVANT => APRÈS ;-))
    1. Merci pour ta réponse,

      non ce n'est pas la peine de chercher dans les sous fichiers car j'ai réuni toutes mes sources au même endroit

      J'ai par exemple :
      SUBROUTINE FONCTION
      
      COMMON /VOITURE/ ROUE, VOLANT, CAPOT
      
      ... code du programme ...
      
      END
      


      et moi je veux

      SUBROUTINE FONCTION
      
      COMMON /VOITURE/ ROUE, VOLANT, CAPOT
      
      C$OMP THREADPRIVATE(VOITURE)
      
      ... code du programme ...
      
      END
      


      Est ce clair ?

      Merci pour ta réponse !
      1. Contributeur
        Re-

        $ ls
        fich1.txt  fich2.txt  foo.sh*
        
        $ cat fich1.txt
        SUBROUTINE FONCTION
        
        COMMON /VOITURE/ ROUE, VOLANT, CAPOT
        
        ... code du programme ...
        
        END
        
        $ cat fich2.txt
        SUBROUTINE FONCTION
        
        COMMUN /VOITURE/ ROUE, VOLANT, CAPOT
        
        ... code du programme ...
        
        END
        
        $ cat foo.sh 
        
        #! /bin/bash 
        
        #set -xv
        
        for fic in *.txt
        do
        grep -q "COMMON" "$fic"
        RETVAL=$?
        if [ "$RETVAL" = 0 ]
        then
        LISTE="$(awk -F '/' '/COMMON/ { print $2 }' $fic)"
        sed -i.bak '/COMMON/{n;s#.*#\nC$OMP THREADPRIVATE('"$LISTE"')\n#}' "$fic"
        fi
        done
        
        
        $ ./foo.sh
        
        $ ls
        fich1.txt  fich1.txt.bak  fich2.txt  foo.sh*
        
        $ cat fich1.txt
        SUBROUTINE FONCTION
        
        COMMON /VOITURE/ ROUE, VOLANT, CAPOT
        
        C$OMP THREADPRIVATE(VOITURE)
        
        ... code du programme ...
        
        END
        
        $

        ;-))