IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Rechercher/Remplacer expression dans un fichier


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2009
    Messages : 31
    Par défaut Rechercher/Remplacer expression dans un fichier
    Bonjour,

    Je dois créer un script permettant de rechercher dans un fichier une phrase et la remplacer par une autre.

    La phrase à remplacer est du type : "MACRO(Param,Status,Message);".
    Status peut prendre 4 valeurs qui vont définir la phrase qui doit remplacer.
    La phrase qui doit remplacer est du type : "NEW_MACRO_XXX(var , Message);".
    var est un nom de variable qui sera toujours le même.

    ex:
    MACRO(Param,"deb",Message); => NEW_MACRO_DEB(var, Message);
    Je ne touche pas à Message, et Param ne doit pas être gardé.

    Je sais qu'il va falloir que je passe par la commande sed, qui permet de remplacer un mot par un autre.
    Mais je n'arrive pas à trouver comment la manipuler pour y arriver...

    Si quelqu'un peut m'aider, merci d'avance.

    Shaina

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Salut,

    En espérant avoir tout compris, essaye cette syntaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed '/deb/ s/\(MACRO\)[^,]*,"\([^"]*\)",\([^)]*);\)/NEW_\1_\U\2\E(var, \3/' fichier

  3. #3
    Membre averti
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2009
    Messages : 31
    Par défaut
    Euh, tu pourrais m'expliquer les différents éléments ? il faudrait que je comprennes vu le nombre de macro à changer. merci

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Je ferai ça dans la journée... en attendant est-ce que la syntaxe marche sur la (les) phrase(s) ayant "deb" comme valeur correspondante à "statut" ?

  5. #5
    Membre averti
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2009
    Messages : 31
    Par défaut
    Citation Envoyé par zipe31 Voir le message
    Je ferai ça dans la journée... en attendant est-ce que la syntaxe marche sur la (les) phrase(s) ayant "deb" comme valeur correspondante à "statut" ?
    Oui le script marche, pardon, j'ai oublié de le mentionner dans le message précédent.

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    /deb/ :
    Le motif de recherche sur lequel portera la substitution. La valeur de "statut" recherchée


    Les remplacement se feront en jouant avec les références arrières dans la partie gauche de la substitution. Les motifs compris entres des parenthèses protégées constitues des références arrières, numérotées selon l'ordre d'apparition, qui seront rappelées par leur numéros respectifs dans la partie droite de la substitution.

    Composition de la regex :

    \(MACRO\) :
    1ère référence arrière ciblant le mot "MACRO"

    [^,]*," :
    Suivie d'un nombre quelconque de caractères hormis une virgule. Donc on s'arrête avant la 1ère virgule rencontrée, puis on prend cette virgule et le guillemet qui la suit.

    \([^"]*\) :
    2ème référence arrière correspondant à un nombre quelconque de caractères hormis un guillemet.

    ", :
    Suivie d'un guillemet et d'une virgule

    \([^)]*);\) :
    3ème référence arrière correspondant à un nombre quelconque de caractères hormis une parenthèse fermante, puis on prend cette parenthèse fermante et le point virgule qui la suit.

    Partie de remplacement :

    /NEW_\1_\U\2\E(var, \3/ :
    On construit la partie de remplacement avec le mot NEW_ suivi de la 1ère référence arrière (\1 = MACRO), puis on ajoute la 2nd référence arrière (\2 = deb) mais on prend soin avant de convertir la casse grâce au switch "\U" (convertit en majuscule tout ce qui le suit), puis on revient à une casse normale avec le switch "E" (ou "e"), ensuite on ajoute "(var, ) et enfin la dernière référence arrière...

Discussions similaires

  1. Logiciel de recherche d'expression dans plusieurs fichiers
    Par Deciprog dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 31/03/2010, 16h23
  2. Rechercher, remplacer et enregistrer un fichier dans le serveur
    Par mactittude dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/02/2009, 09h57
  3. Rechercher une expression dans un fichier xml
    Par snopims dans le forum ASP.NET
    Réponses: 4
    Dernier message: 08/12/2008, 12h03
  4. rechercher/remplacer chaine dans fichier txt
    Par C_Mila dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 25/02/2007, 12h06
  5. Réponses: 22
    Dernier message: 05/09/2006, 19h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo