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 :

script shell avec sed


Sujet :

Shell et commandes GNU

  1. #1
    Futur Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 11
    Points : 7
    Points
    7
    Par défaut script shell avec sed
    Bonjour,

    je veux écrire un script shell qui est sensé modifier plusieurs lignes dans un fichier.
    comment puis je le faire avec la commande sed?

    merci d'avance!

  2. #2
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    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
    $ cat a
    aze
    rty
    aze
    rty
     
    $ sed -i "s/aze/uio/g" a
    $ cat a
    uio
    rty
    uio
    rty
    uio
    Pourquoi ne pas consulter la documentation ?


  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 264
    Points
    12 264
    Par défaut
    Citation Envoyé par Eye4eye Voir le message
    Bonjour,

    je veux écrire un script shell qui est sensé modifier plusieurs lignes dans un fichier.
    comment puis je le faire avec la commande sed?

    merci d'avance!
    oui mais quelle style de modif exactement
    -substitution conditionnelle ?
    -substitution brute ?
    -jonction de ligne ?
    -tri ?
    autre...

  4. #4
    Futur Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par ggnore Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $ cat a
    aze
    rty
    aze
    rty
     
    $ sed -i "s/aze/uio/g" a
    $ cat a
    uio
    rty
    uio
    rty
    uio
    Pourquoi ne pas consulter la documentation ?


    je l'ai essayé, et ça marche. Mais seulement sur une ligne or moi je voudrais le faire sur plusieurs lignes, et j'y arrive pas
    Mon fichier ressemble à ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <VARIABLE name=#VM_CallBack_OutgoingTrunk empty=yes>
            <VALUE>10.165.122.110</VALUE>
    </VARIABLE>
    <VARIABLE name=#VM_CallBack_PrefixToAdd empty=yes>
            <VALUE>A02</VALUE>
    Et autre souci, je veux en fait pouvoir modifier ce qui se trouve dans les balises VALUE mais il y a des VARIABLE qui ont la même VALUE. Alors je sais pas comment m'y prendre pour ne modifier que celle que je souhaite.

  5. #5
    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 264
    Points
    12 264
    Par défaut
    sed -e "1,$ s/model/pattern/g" fichier
    serait peut etre une solution alors
    de la ligne 1 à la fin substitute model par pattern sur toute la ligne

    ce qui 'évite le probleme de ta variable.
    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
     
     
    [root@SINAGIOSS50 tmp]# cat > toto
    VARIABLE name=#VM_CallBack_OutgoingTrunk empty=yes>
            <VALUE>10.165.122.110</VALUE>
    </VARIABLE>
    <VARIABLE name=#VM_CallBack_PrefixToAdd empty=yes>
            <VALUE>A02</VALUE>
    [root@SINAGIOSS50 tmp]#
    [root@SINAGIOSS50 tmp]# sed -e "1,$ s/VALUE\>.*\</VALUE\>TOTO\<\//g" toto
    VARIABLE name=#VM_CallBack_OutgoingTrunk empty=yes>
            <VALUE>TOTO</VALUE>
    </VARIABLE>
    <VARIABLE name=#VM_CallBack_PrefixToAdd empty=yes>
            <VALUE>TOTO</VALUE>
    [root@SINAGIOSS50 tmp]#

  6. #6
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    Essaie d'être clair

    Quel motif cherches tu ? qu'est ce que tu veux en remplacement ? Donne nous un exemple de fichier en sortie et en entrée en mettant en évidence ce qui a changé.

  7. #7
    Futur Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    je vais essayer et je vous dirai si ça marche, merci quand même!

  8. #8
    Futur Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par ggnore Voir le message
    Essaie d'être clair

    Quel motif cherches tu ? qu'est ce que tu veux en remplacement ? Donne nous un exemple de fichier en sortie et en entrée en mettant en évidence ce qui a changé.
    Voici par exemple le contenu du fichier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <VARIABLE name=#VM_SimpleEmailNotif empty=yes>
            <VALUE>1</VALUE>
    </VARIABLE>
    <VARIABLE name=#VM_EmailNotifMode empty=yes>
            <VALUE>2</VALUE>
    </VARIABLE>
    <VARIABLE name=#VM_ChangePassword empty=yes>
            <VALUE>1</VALUE>
    </VARIABLE>
    <VARIABLE name=#VM_ChangeLanguage empty=yes>
            <VALUE>1</VALUE>
    </VARIABLE>
    Et ce que je voudrais à la fin de la modification

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <VARIABLE name=#VM_SimpleEmailNotif empty=yes>
            <VALUE>0</VALUE>
    </VARIABLE>
    <VARIABLE name=#VM_EmailNotifMode empty=yes>
            <VALUE>3</VALUE>
    </VARIABLE>
    <VARIABLE name=#VM_ChangePassword empty=yes>
            <VALUE>1</VALUE>
    </VARIABLE>
    <VARIABLE name=#VM_ChangeLanguage empty=yes>
            <VALUE>1</VALUE>
    </VARIABLE>
    Dans cet exemple, je change la valeur de deux variables, mais ça peut être beaucoup plus.
    Et petite remarque, la valeur de la variable VM_SimpleEmailNotif est la même que celle de VM_ChangePassword mais je ne veux pouvoir changer que celle de VM_SimpleEmailNotif.
    Donc ma question est : comment je modifie les valeurs des variables et comment je fais quand j'ai des valeurs qui sont les mêmes et que je veux modifier qu'une seule d'entre elle par exemple.
    J'espère avoir été clair

  9. #9
    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 264
    Points
    12 264
    Par défaut
    rien ne t'empeche de chainner les traitement dans sed

    -e ........... -e ............ etc...etc....

  10. #10
    Nouveau membre du Club
    Inscrit en
    Octobre 2008
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 30
    Points : 33
    Points
    33
    Par défaut
    sed est utile pour faire des substitutions, mais il travaille ligne par ligne. Dans ton exemple le NOM de la variable est sur la ligne précédant la ligne que tu veux modifier... donc c'est mort.

    Deux solutions pour t'en sortir:
    * Tu utilises awk. Il permet de définir des variables donc on peut s'en sortir,
    * Ou bien tu supprimes les retours à la lignes

    Je pense que l'utilisation de awk ici est plus simple et plus sûr.


    Exemple (compliqué) avec sed:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    tr \\n \| <fichier.xml | \
    sed -e 's,\(<VARIABLE name=#VM_SimpleEmailNotif[^>]*>[^<]*<VALUE>\)1</VALUE>,\10</VALUE>,g' | \
    tr \| \\n

Discussions similaires

  1. script shell avec sed
    Par zorooo dans le forum Shell et commandes GNU
    Réponses: 8
    Dernier message: 15/12/2009, 13h00
  2. [Système] Exécution d'un script SHELL avec PHP
    Par diabli73 dans le forum Langage
    Réponses: 5
    Dernier message: 02/10/2008, 15h07
  3. Script Shell avec fonction FTP
    Par blackstreet dans le forum Distributions
    Réponses: 1
    Dernier message: 18/09/2007, 09h33
  4. Script shell avec HTML avec warning
    Par ab_2006 dans le forum Shell et commandes GNU
    Réponses: 8
    Dernier message: 05/10/2006, 13h15
  5. Un script shell avec nombre d'argument variable
    Par lastrecrue dans le forum Linux
    Réponses: 1
    Dernier message: 28/05/2006, 11h35

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