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 :

insert if pattern (bis)


Sujet :

Shell et commandes POSIX

  1. #1
    Membre habitué
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2012
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2012
    Messages : 53
    Points : 133
    Points
    133
    Par défaut insert if pattern (bis)
    Bonjour,

    dans le même esprit que http://www.developpez.net/forums/d16...rt-if-pattern/ je dois encore modifier un fichier.

    Je dispose d'un fichier qui contient des enchaînements:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    [du texte variable]debut
    toto [du texte variable] findebut[du texte variable] 
    titi [du texte variable] fintoto [du texte variable] 
    tutu [du texte variable] fintiti [du texte variable] 
    fin [du texte variable] fintutu [du texte variable]
    On peu considérer ça comme une suite de commandes qui ne s'exécutent que si la précédente est OK, il se lit de la façon suivante: j'ai le début, de ce début dépend toto. titi dépend de toto, tutu de titi et fin de tutu.

    Je dois ajouter à ce fichier des lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    tagada [du texte variable] findebut [du texte variable]
    tugudu [du texte variable] fintagada [du texte variable]
    ces lignes doivent se trouver entre les lignes début(en première position) et toto (première position) globalement, dans l'exemple entre les lignes une et deux.

    j' arrive pour une ligne avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -lne 'print $_;print "tagada [du texte variable] debut [du texte variable] " if(/debut/);' monfichier >> temp && mv temp monfichier
    Mais ça ne fonctionne que pour une ligne à la fois et d'autre part, je dois maintenant modifier la ligne toto pour qu'elle ne dépende plus de findebut mais de fintagada.

    J'ai test en déclarant une variable data contenant l'ensemble de mes lignes mais ça ne m'insére qu'une ligne vide alors qu'un echo de mon $data me renvoie bien mes lignes.

    Merci

  2. #2
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    root@h2g2:/tmp# cat > toto
    [du texte variable]debut
    toto [du texte variable] findebut[du texte variable] 
    titi [du texte variable] fintoto [du texte variable] 
    tutu [du texte variable] fintiti [du texte variable] 
    fin [du texte variable] fintutu [du texte variable]
    root@h2g2:/tmp# sed '/debut/,/titi/ !d; /debut$/ d' toto
    toto [du texte variable] findebut[du texte variable] 
    titi [du texte variable] fintoto [du texte variable] 
    root@h2g2:/tmp# rm toto
    et pour la substitution idem
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    root@h2g2:/tmp# sed '/debut/,/titi/ !d; /debut$/ d ; s/fintoto/fintagada/' toto
    toto [du texte variable] findebut[du texte variable] 
    titi [du texte variable] fintagada [du texte variable] 
    root@h2g2:/tmp#
    je te laisse adapter

    pour injecter en mode append (ajout apres le patern \a en mode insert \i
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    root@h2g2:/tmp# sed '/debut$/ a\
    tagada du texte variable findebut du texte variabe^M tugudu du texte variable fintagada du texte variable  ;' toto
    du texte variable]debut
     tugudu du texte variable fintagada du texte variable  ;
    toto [du texte variable] findebut[du texte variable] 
    titi [du texte variable] fintoto [du texte variable] 
    tutu [du texte variable] fintiti [du texte variable] 
    fin [du texte variable] fintutu [du texte variable]
    root@h2g2:/tmp#
    etc...

  3. #3
    Membre habitué
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2012
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2012
    Messages : 53
    Points : 133
    Points
    133
    Par défaut
    Bonjour,

    j'ai du mal m'exprimer.

    Mon fichier avant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    debut
    toto [du texte variable] findebut [du texte variable] 
    titi [du texte variable] fintoto [du texte variable] 
    tutu [du texte variable] fintiti [du texte variable] 
    fin [du texte variable] fintutu [du texte variable]
    Mon fichier après
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    debut
    tagada [du texte variable] findebut [du texte variable]
    tugudu [du texte variable] fintagada [du texte variable]
    toto [du texte variable] fintugudu[du texte variable] 
    titi [du texte variable] toto [du texte variable] 
    tutu [du texte variable] titi [du texte variable] 
    fin [du texte variable] tutu [du texte variable]

  4. #4
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    root@h2g2:/tmp#  sed  -e '/debut$/ a\
    tagada [du texte variable] findebut [du texte variable] \n tugudu [du texte variable] fintagada [du texte variable] ' toto
    debut
    tagada [du texte variable] findebut [du texte variable] 
    tugudu [du texte variable] fintagada [du texte variable] 
    toto [du texte variable] findebut [du texte variable] 
    titi [du texte variable] fintoto [du texte variable] 
    tutu [du texte variable] fintiti [du texte variable] 
    fin [du texte variable] fintutu [du texte variable]
    root@h2g2:/tmp#
    oui comme indique

    pour sortir en resultat de sortie bien sur faut convertir en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     sed  -e '/debut$/ a\
    tagada [du texte variable] findebut [du texte variable] \n tugudu [du texte variable] fintagada [du texte variable] ' toto > resultat
    tu n a plus qu a adapter

  5. #5
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    salut,

    toujours via Perl (de fait le forum concerné serait peut-être mieux indiqué à force), et si on se base sur les données que tu donnes à savoir que debut est un "mot" bien délimité, à ne pas confondre donc avec findebut par exemple même si ce dernier contient lui aussi "debut", on peut utiliser les word boundaries \b des regex Perl :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -lne 'print; print "tagada [du texte variable] findebut [du texte variable]\ntugudu [du texte variable] fintagada [du texte variable]" if /\bdebut\b/' fichier

Discussions similaires

  1. Insert if pattern
    Par barbican82 dans le forum Shell et commandes POSIX
    Réponses: 5
    Dernier message: 02/01/2017, 10h30
  2. [MySQL] regex : exploiter plusieurs pattern pour insert en BDD
    Par kairi084 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 05/11/2010, 21h46
  3. Insertion Automatise Bis
    Par dimitrak dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 24/07/2007, 12h13
  4. [Postgresql] pb lors d'insertion de données
    Par bob20000 dans le forum Requêtes
    Réponses: 8
    Dernier message: 04/11/2002, 15h33
  5. Réponses: 4
    Dernier message: 28/09/2002, 00h00

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