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 :

aide pour rajouter une valeur entre deux patterns (ou replace ligne avec retour charriot)


Sujet :

Shell et commandes POSIX

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur Systèmes
    Inscrit en
    Août 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Monaco

    Informations professionnelles :
    Activité : Ingénieur Systèmes
    Secteur : Finance

    Informations forums :
    Inscription : Août 2011
    Messages : 75
    Points : 87
    Points
    87
    Par défaut aide pour rajouter une valeur entre deux patterns (ou replace ligne avec retour charriot)
    Bonjour,

    J'ai ce jour un petit soucis dans un script que j'essaye de faire.

    j'essaye actuellement d'insérer une ligne au milieu d'autres dans un fichier.

    En effet, voici un exemple de mon fichier (j'ai mis des valeurs random à la place de mon fichier réel, c'est le même genre disons) :

    fsd dsfsd fsdfsdfdsfds zerez 155.145.0.1
    fsd random1 fsdfsdfdsfds zerez 155.145.0.2
    fsd dsfsd fsdfsdfdsfds zerez 155.145.0.3
    fsd randomX fsdfsdfdsfds zerez 155.145.0.9
    fsd dssdfsd fsdfsdfdsfds zerez 155.145.0.27
    fsd dsfsd fsdfsdfdsfds zerez 155.145.0.28
    fsd dsfsd fsdfsdfdsfds zerez 155.145.0.29
    fsd dsfsd fsdfsdfdsfds zerez 155.145.0.31
    fsd dsfsd fsdfsdfdsfds zerez 155.145.0.72


    mon objectif est le suivant :

    pouvoir par exemple rajouter la ligne :

    fsd dsfsd fsdfsdfdsfds zerez 155.145.0.14

    au bon endroit (c'est à dire entre l'IP 9 et l'IP 27).

    quelqu'un aurait-il un moyen de faire ça simplement ? (que ça soit avec sed, awk, ou peu importe l'outil, même si j'ai une préférence pour sed).

    j'arriverais à la limite à scripter le système trouvant les lignes de départ et d'arrivée (celle avec 9 et 27), mais je ne vois pas trop comment faire en sorte de rajouter mon texte entre les deux.

    dois-je fais un replace (substitute) de la ligne :

    fsd dsfsd fsdfsdfdsfds zerez 155.145.0.9
    et rajouter un retour chariot derrière, puis ma ligne avec l'IP 14 ?

    si c'est le cas, quelqu'un pourrait-il me donner la commande sed en question pour ce type de truc ?

    ex : sed -e 's/ligne_avec_ip9/$truc_pour_repeter_la_ligne\n$nouvelleligne/' mais j'ai fait pas mal de tests et ça ne fonctionne pas.

    j'imagine aussi que l'intégralité est faisable plus simplement en awk, en faisant un tri sur la derniere colonne etc.. mais je connais mal awk

    merci

  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,

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    $ cat plop 
    fsd dsfsd fsdfsdfdsfds zerez 155.145.0.1
    fsd random1 fsdfsdfdsfds zerez 155.145.0.2
    fsd dsfsd fsdfsdfdsfds zerez 155.145.0.3
    fsd randomX fsdfsdfdsfds zerez 155.145.0.9
    fsd dssdfsd fsdfsdfdsfds zerez 155.145.0.27
    fsd dsfsd fsdfsdfdsfds zerez 155.145.0.28
    fsd dsfsd fsdfsdfdsfds zerez 155.145.0.29
    fsd dsfsd fsdfsdfdsfds zerez 155.145.0.31
    fsd dsfsd fsdfsdfdsfds zerez 155.145.0.72
     
    $ sed '/\.9$/a\
    fsd dsfsd fsdfsdfdsfds zerez 155.145.0.14
    ' plop
    fsd dsfsd fsdfsdfdsfds zerez 155.145.0.1
    fsd random1 fsdfsdfdsfds zerez 155.145.0.2
    fsd dsfsd fsdfsdfdsfds zerez 155.145.0.3
    fsd randomX fsdfsdfdsfds zerez 155.145.0.9
    fsd dsfsd fsdfsdfdsfds zerez 155.145.0.14
    fsd dssdfsd fsdfsdfdsfds zerez 155.145.0.27
    fsd dsfsd fsdfsdfdsfds zerez 155.145.0.28
    fsd dsfsd fsdfsdfdsfds zerez 155.145.0.29
    fsd dsfsd fsdfsdfdsfds zerez 155.145.0.31
    fsd dsfsd fsdfsdfdsfds zerez 155.145.0.72
     
    $

  3. #3
    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
    Ces deux autres solutions marchent aussi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ sed '/\.27$/i\                                                   
    fsd dsfsd fsdfsdfdsfds zerez 155.145.0.14
    ' plop
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed 's/\.9$/&\nfsd dsfsd fsdfsdfdsfds zerez 155.145.0.14/' plop

  4. #4
    Membre régulier
    Homme Profil pro
    Ingénieur Systèmes
    Inscrit en
    Août 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Monaco

    Informations professionnelles :
    Activité : Ingénieur Systèmes
    Secteur : Finance

    Informations forums :
    Inscription : Août 2011
    Messages : 75
    Points : 87
    Points
    87
    Par défaut
    merci bcp je vais tester un truc du genre.

    n'y-a-t'il pas moyen de le faire sur une ligne ?

    Zip31 : oui la première fonctionne aussi, j'ai bien compris l'histoire du i/a pour avant/après

    en revanche le \n ne fonctionne pas dans ma version de sed (solaris 10)
    j'ai un peu tout testé avec, et il me rajoute un n à la place du retour chariot

  5. #5
    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 frenchlion Voir le message
    merci bcp je vais tester un truc du genre.

    n'y-a-t'il pas moyen de le faire sur une ligne ?
    Si. Mais il peut y avoir quelques désagréments provoqués par certains caractères (je ne sais plus lesquels) qui sont mal interprétés à cause de l'anti-slash, d'où mon habitude de passer à la ligne

  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
    Citation Envoyé par frenchlion Voir le message
    en revanche le \n ne fonctionne pas dans ma version de sed (solaris 10)
    j'ai un peu tout testé avec, et il me rajoute un n à la place du retour chariot
    Alors il te faudra te résigner à le faire sur 2 lignes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ sed 's/\.9$/&\
    fsd dsfsd fsdfsdfdsfds zerez 155.145.0.14/' plop

  7. #7
    Membre régulier
    Homme Profil pro
    Ingénieur Systèmes
    Inscrit en
    Août 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Monaco

    Informations professionnelles :
    Activité : Ingénieur Systèmes
    Secteur : Finance

    Informations forums :
    Inscription : Août 2011
    Messages : 75
    Points : 87
    Points
    87
    Par défaut
    merci bcp c sympa

Discussions similaires

  1. [XL-2007] Extraire une valeur entre deux
    Par Nounours1 dans le forum Excel
    Réponses: 3
    Dernier message: 10/07/2010, 20h31
  2. [RegEx] Récupérer une valeur entre deux chaines
    Par thebarbarius dans le forum Langage
    Réponses: 7
    Dernier message: 04/04/2010, 16h47
  3. Réponses: 6
    Dernier message: 13/03/2010, 10h02
  4. basculer une valeur entre deux listes
    Par carlostropico dans le forum IHM
    Réponses: 2
    Dernier message: 10/11/2008, 11h14
  5. [XPATH] Rechercher une valeur entre deux valeurs min et max
    Par icicmoi dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 27/10/2008, 12h12

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