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 :

Append avec sed


Sujet :

Linux

  1. #1
    Membre régulier
    Femme Profil pro
    Développeur Java
    Inscrit en
    Juin 2004
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 49
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 166
    Points : 112
    Points
    112
    Par défaut Append avec sed
    Bonjour

    J'ai un fichier qui contient plusieurs lignes commençant par include :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    include xxx
    include yyy
    J'aimerais ajouter un nouvel include après le dernier pour avoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    include xxx
    include yyy
    include moninclude
    Pour l’instant j'en suis a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed "/include/ a\include moninclude" monfichier
    Le problème c'est que ca ajoute une ligne après chaque include, j'obtiens donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    include xxx
    include moninclude
    include yyy
    include moninclude
    Comment faire pour matcher uniquement le dernier include ?

  2. #2
    Expert éminent

    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
    Points : 6 276
    Points
    6 276
    Par défaut
    Salut,

    Je suppose que les includes sont consécutifs dans ton fichier ?

    Le dernier est-il suivi d'une ligne vide ?

  3. #3
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 262
    Points
    12 262
    Par défaut
    Citation Envoyé par felix79 Voir le message
    Bonjour

    J'ai un fichier qui contient plusieurs lignes commençant par include :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    include xxx
    include yyy
    J'aimerais ajouter un nouvel include après le dernier pour avoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    include xxx
    include yyy
    include moninclude
    Pour l’instant j'en suis a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed "/include/ a\include moninclude" monfichier
    Le problème c'est que ca ajoute une ligne après chaque include, j'obtiens donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    include xxx
    include moninclude
    include yyy
    include moninclude
    Comment faire pour matcher uniquement le dernier include ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed "/include YYY/ a\include moninclude" monfichier

  4. #4
    Expert éminent

    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
    Points : 6 276
    Points
    6 276
    Par défaut
    Salut,

    Citation Envoyé par frp31 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed "/include YYY/ a\include moninclude" monfichier
    Cela suppose que le "yyy" est connu d'avance, ce dont je doute, d'où ma question

  5. #5
    Membre régulier
    Femme Profil pro
    Développeur Java
    Inscrit en
    Juin 2004
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 49
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 166
    Points : 112
    Points
    112
    Par défaut
    En effet, yyy n'est pas connu
    Les includes sont consécutifs et suivi d'une ligne vide

  6. #6
    Expert éminent

    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
    Points : 6 276
    Points
    6 276
    Par défaut
    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
    $ cat fich
    include xxx
    include yyy
    include zzz
    
    blablabla
    blabla
    
    $ sed '/include/,/^$/{s/^$/OK\n&/}' fich
    include xxx
    include yyy
    include zzz
    OK
    
    blablabla
    blabla

  7. #7
    Membre régulier
    Femme Profil pro
    Développeur Java
    Inscrit en
    Juin 2004
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 49
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 166
    Points : 112
    Points
    112
    Par défaut
    Ca marche !
    Je comprend pas bien comment mais c'est bon...

    Merci !

  8. #8
    Expert éminent

    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
    Points : 6 276
    Points
    6 276
    Par défaut
    Citation Envoyé par felix79 Voir le message
    Ca marche !
    Je comprend pas bien comment mais c'est bon...

    Merci !
    /include/,/^$/
    On définit une plage d'adresses à l'aide de 2 motifs.
    Le premier motif cible la 1ère ligne contenant "include"
    Le second la 1ère ligne vide

    {
    Regroupement de commande entre accolades (facultatif pour ton cas)

    s/^$/OK\n&/
    On substitue la ligne vide (^$) par le texte approprié (OK), suivi d'un saut de ligne (\n) et par le motif mis en correspondance représenté par l'esperluette (&), autrement dit une ligne vide.

    }
    Fin du regroupement de commandes.


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

Discussions similaires

  1. Remplacement d'une IP avec sed
    Par Hikage dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 04/07/2006, 17h34
  2. Gérer les espaces avec SED
    Par byloute dans le forum Linux
    Réponses: 7
    Dernier message: 29/10/2005, 20h07
  3. Recherche avec sed insensible à la casse
    Par _Mac_ dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 12/10/2005, 16h42
  4. Script bash : Pb avec sed
    Par fred64 dans le forum Linux
    Réponses: 3
    Dernier message: 19/08/2005, 12h24
  5. Extraire une valeur d'une ligne avec sed
    Par jojolepabo dans le forum Linux
    Réponses: 6
    Dernier message: 27/10/2004, 10h34

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