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
    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
    
    $

    ;-))
    1
    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 !
      0
      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