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

Linux Discussion :

sed: remplacer une ligne qui commence par Version


Sujet :

Linux

  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2004
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 163
    Par défaut sed: remplacer une ligne qui commence par Version
    Bonjour,

    je souhaiterai utiliser sed pour remplacer une ligne dans mon fichier qui est:
    Version: TAG_01 en Version: TAG_02.
    j'ai essayé les commandes suivantes sans succés:
    sed '/^Version/Version: TAG_02/' fichier.txt
    et '/Version*/Version:TAG_02/' fichier.txt, j'ai eu à chaque fois la même erreur:
    sed: -e expression n°1, caractère 11: Commande inconnue: `V'

    Merci pour votre aide

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 25
    Par défaut
    Bonjour,

    En fait, tu oublies d'utiliser le s/recherche/remplacement/

    Le code suivante, remplace la ligne typée : Version: TAG_XX en Version: TAG_02

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo 'Version: TAG_01' | sed 's/^Version: TAG_[0-9][0-9]/Version: TAG_02/'

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2004
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 163
    Par défaut
    Je te remercie pour ta réponse par contre mon souci c'est que mon tag peut être du style AA_BB_TAG_0125 (grosso modo je ne sais jamais comment il s'appelle), c'est pourquoi j'aurai besoin de simplement lui indiquer que ma chaine commence par "Version:" et de remplacer la chaine entièrement. Merci

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 25
    Par défaut
    Si je comprends bien ton fichier peut avoir les occurences suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Version: AA_BB_TAG_0125
    Version: TAG_02
    Version: AA_BB_TAG_01
    ?

    Et toutes ses occurences, tu veux les remettres dans un format "normalisée" type

    Version: AA_BB_TAG_0125 en Version: TAG_0125 ?

    où bien

    Version: AA_BB_TAG_0125 en Version: TAG_02 ?

    Pour le premier type:
    (Récupération de l'id TAG avec possibilité de texte avant le "TAG"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo 'Version: TAG_01' | sed '/^Version/ s/[a-zA-Z_]*TAG_\([0-9]*\)/TAG_\1/'
    Pour la second type :
    (Remplacement direct du texte AA_BB_TAG_ID par TAG_02)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo 'Version: TAG_01' | sed '/^Version/ s/[a-zA-Z_]*TAG_[0-9]*/TAG_02/'

  5. #5
    Membre confirmé
    Inscrit en
    Septembre 2004
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 163
    Par défaut
    Exact, j'ai réussi en faisant cette ligne:
    sed 's/^Version.*/Version: BR_AA_BB_TAG01/g' essai.txt > essai2.txt

    ce que j'aimerai faire maintenant c'est d'en faire une variable:
    DIR=BR_AA_BB_TAG01
    et d'utiliser DIR dans la commande sed, mais $DIR ne marche pas.
    Une idée?

    Merci beaucoup.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2007
    Messages : 66
    Par défaut
    Bonjour,

    essaie de remplacer le simple quotes par des doubles :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed " ..... ${DIR}.... " fichier.txt

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 25
    Par défaut
    Concernant la variable, c'est normal, car on est dans des quotes simples.

    Pour utiliser des variables il faut être entre guillemets.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    DIR="AA_BB_TAG_02"
    echo 'Version: TAG_01' | sed s/'^Version.*'/"Version: $DIR"/
    Edit:

    Grilled by To-Ma

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2007
    Messages : 66
    Par défaut
    ... ce qui permet de vérifier que dans mon exemple les accolades ne sont pas nécessaire (elles le seraient si l'insertion de DIR était suivie d'autres caractères: ${DIR}blabla ).

  9. #9
    Membre confirmé
    Inscrit en
    Septembre 2004
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 163
    Par défaut
    Merci bien, l'autre possibilité est d'écrire comme ceci: '$DIR' dans le sed.

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

Discussions similaires

  1. [Sed]Remplacer une série d'espaces par un délimiteur
    Par progfou dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 24/01/2011, 15h09
  2. Réponses: 2
    Dernier message: 19/01/2011, 15h41
  3. Réponses: 1
    Dernier message: 30/09/2010, 10h34
  4. Remplacer une ligne de tableau par une autre
    Par Tikaway dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 09/09/2010, 13h50
  5. Réponses: 5
    Dernier message: 19/01/2007, 22h53

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