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 POSIX Discussion :

[awk] Remplacement de pattern comportant un caractère spécial


Sujet :

Shell et commandes POSIX

  1. #1
    Membre à l'essai
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Février 2016
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Février 2016
    Messages : 21
    Points : 20
    Points
    20
    Par défaut [awk] Remplacement de pattern comportant un caractère spécial
    Bonjour,

    Je fait de nouveau appel à vos services pour l'écriture d'un script (shell) qui permettra de créer un fichier B depuis un fichier (original) A en remplaçant 2 champs situés aléatoirement dans le fichier.

    Voici mon fichier (original) A :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SERVICE;ADD;£Host£;Template;Template_£Inst£;tutu
    SERVICE;£Host£;Template;;1;Servcice_£Inst£;tutu;Fic;£Inst£
    SERVICE;£Host£;Template;1;Servcice_£Inst£;tutu;Fic;£Inst£
    SERVICE;£Host£;Template;Servcice_£Inst£;tutu;Fic;£Inst£;toto £Inst£;1
    L'objectif serait donc de remplacer dans un nouveau fichier les motifs £Host£ et £Inst£ de chaque ligne.

    J'aurai souhaité exécuter cette commande via awk mais j'avoue peiner un peu avec les caractères spéciaux qui permettent dans mon cas de me servir de délimiteur sur mon motif...


    Voici mon script actuel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    #!/bin/bash
     
    ficENT=/home/pi/scripts/FicOri
    ficSOR=/home/pi/scripts/FicOKI
    var1=monserveur
    var2=inst-01-btch
     
    awk -v v1=$var1 -v v2=$var2 '
    {
      gsub("£Host£", v1)
      gsub("£Inst£", v2)
      print
    }' $ficENT >> $ficSOR
     
    exit

    Je n'arrive pas à échapper le caractère "£".

    Le résultat attendu serait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SERVICE;ADD;monserveur;Template;Template_inst-01-btch;tutu
    SERVICE;monserveur;Template;;1;Servcice_inst-01-btch;tutu;Fic;inst-01-btch
    SERVICE;monserveur;Template;1;Servcice_inst-01-btch;tutu;Fic;inst-01-btch
    SERVICE;monserveur;Template;Servcice_inst-01-btch;tutu;Fic;inst-01-btch;toto inst-01-btch;1

    Auriez-vous SVP une piste ou une solution pour résoudre mon PB ?

    Par avance merci

  2. #2
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 842
    Points
    7 842
    Par défaut
    Il n'y a pas besoin d'échapper « £ » qui n'est pas un caractère spécial:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ echo "SERVICE;£Host£;Template;;1;Servcice_£Inst£;tutu;Fic;£Inst£" |
        awk '{ gsub("£Host£","monserveur"); print }'
    SERVICE;monserveur;Template;;1;Servcice_£Inst£;tutu;Fic;£Inst£
    Tu as peut-être un problème de codage UTF-8.
    ɹǝsn *sıɹɐlos*

  3. #3
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par jlliagre Voir le message
    Tu as peut-être un problème de codage UTF-8.
    Pour préciser, il se pourrait que la livre "£" ne soit pas codée de la même manière dans ton fichier à traiter et dans ton script.

    Une manière de vérifier le codage consiste à utiliser la commande od -bc sur le fichier et sur le script:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    od -bc fichier_A
    # puis
    od -bc mon_script.sh
    Par ailleurs, il n'est pas nécessaire d'utiliser le canon awk pour tuer la mouche des petites modifications que tu dois faire. Un simple sed devrait suffire (à condition d'utiliser le bon codage évidemment...):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -e "s/£Host£/monserveur/g" -e "s/£Inst£/inst-01-btch/g" $ficENT >> $ficSOR

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 15
    Dernier message: 19/07/2010, 10h40
  2. Remplacer un caractère spécial
    Par Z3phur dans le forum SQL
    Réponses: 15
    Dernier message: 28/04/2009, 16h20
  3. Réponses: 3
    Dernier message: 25/11/2008, 18h36
  4. [RegEx] remplacer dans une chaine de caractère (cas spécial)
    Par etage92 dans le forum Langage
    Réponses: 8
    Dernier message: 04/07/2008, 18h24
  5. remplacer un caractère spécial inconnu
    Par half_red68 dans le forum Langage
    Réponses: 1
    Dernier message: 29/04/2008, 10h21

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