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 :

Utilisation de la commande sed


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 21
    Par défaut Utilisation de la commande sed
    Bonjour bonjour.
    Ma question va surement paraitre idiote pour beaucoup mais la voici.

    Je dois remplacer dans un fichier tous les caractère ¤ qui ne sont pas compris entre des § par des \¤.
    exemple :
    ab¤cd deviendra ab\¤cd
    ab§¤§cd restera tel quel

    Voici la commande que j'utilise pour l'instant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     sed "s/[^§]¤[^§]/\\\¤/g" test.txt
    Seul problème, je perds les anciens caractères (celui d'avant et d'après)
    exemple : ab¤cd devient a\¤d au lieu de ab\¤cd

    Comment faire pour remettre les anciens caractères ?

    Merci d'avance

  2. #2
    LLB
    LLB est déconnecté
    Membre émérite
    Inscrit en
    Mars 2002
    Messages
    968
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 968
    Par défaut
    Utilise des groupes et desback-references.
    Ton exemple devient alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed "s/\([^§]\)¤\([^§]\)/\1\\\¤\2/g" test.txt
    (non testé)

  3. #3
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 21
    Par défaut
    merci beaucoup pour ton aide, ca marche impec !

  4. #4
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 21
    Par défaut
    Encore une petite question pour la route alors, vu que t'es chaud

    Comment faire maintenant pour qu'il me remplace les §¤ par des §\¤ et les ¤§ par des \¤§ et tout ca avec une seule ligne sed ?

    parceque pour l'instant il ne les remplace pas a cause des [^§]..[^§]

    Merci d'avance

  5. #5
    LLB
    LLB est déconnecté
    Membre émérite
    Inscrit en
    Mars 2002
    Messages
    968
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 968
    Par défaut
    Je vois.

    Il suffit donc de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed "s/\\(\\([^§]\\)¤\\(.\\)\\|\\(.\\)¤\\([^§]\\)\\)/\\2\\4\\\\¤\\3\\5/g"
    Comment ça, le code sed n'est pas lisible ? C'est pour ça que des gens ont inventé le quoting et les regexps étendues.
    Ce qui donne après simplification :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -r 's/([^§])¤(.)|(.)¤([^§])/\1\3\\¤\2\4/g'
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $ cat tmp
    ab¤cd
    ab§¤§cd
    ab¤§cd
    ab§¤cd
    $ sed -r 's/([^§])¤(.)|(.)¤([^§])/\1\3\\¤\2\4/g' < tmp
    ab\¤cd
    ab§¤§cd
    ab\¤§cd
    ab§\¤d
    C'est bien ce que tu voulais ?

  6. #6
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 21
    Par défaut
    Encore une fois merci . J'aurai du y penser.
    Aller, encore une question pour la route vu que t es le roi des expressions :

    comment on fait quand il y a plus de 9 "paramètres" entre parenthès ?
    c'est a dire que pour le dixième, si je mets \10 il me marque le premier paramètre puis le 0 (du dix). Je sais pas si c'est très clair.

    En fait, j'ai combiné ce traitement avec un autre qui faisait paramètre mais avec d'autre lettres :
    exemple :
    aba --> aba
    abc --> a\bc
    cba --> c\ba
    cbd --> c\bd

    pareil avec les e et f :
    efe --> efe
    efg --> e\fg
    gfe --> g\fe
    gfh --> g\fh

    tu vois le genre

    voici l'expression que j'utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -r 's/([^a])(b)(.)|(.)(b)([^a])|([^e])(f)(.)|(.)(f)([^e])/\1\4\7\10\\\2\5\8\11\3\6\9\12/g' test.txt
    Si t y arrives t'es le roi

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

Discussions similaires

  1. Utilisation de la commande sed avec variable
    Par elfide dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 09/12/2011, 17h56
  2. utilisation de la commande sed
    Par jeannox69 dans le forum Linux
    Réponses: 3
    Dernier message: 13/02/2011, 19h48
  3. Réponses: 3
    Dernier message: 24/04/2009, 09h12
  4. Utilisation de la commande SED.
    Par pcsystemd dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 02/05/2008, 14h52
  5. Utilisation de la commande sed
    Par nizniz dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 04/10/2006, 21h03

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