Script bash de recherche

MrLuck Messages postés 43 Date d'inscription   Statut Membre Dernière intervention   -  
zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   -
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. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    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
  2. MrLuck Messages postés 43 Date d'inscription   Statut Membre Dernière intervention   5
     
    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
  3. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    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