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

Administration système Discussion :

Aide pour une expression régulière avec sed


Sujet :

Administration système

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Par défaut Aide pour une expression régulière avec sed
    Bonjour,

    Je voudrais trouver l'équivalent sous sed de l'expression régulière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    s/prefix_(?!(motif1|motif2))[^"]+/prefix_motif1/g
    Elle a pour but de rechercher tous les éléments matchant prefix_motifN, avec motifN différent de motif1 et de motif2 et de les remplacer par prefix_motif1.

    Apparement le "negative lookahead" (?!...) n'est pas connu de sed.

    Pourtant j'utilise bien les modificateurs -r et -e, donc ça devrait reprendre les regex de Perl mais non.

    Donc si vous avez des idées, je suis preneur.

    Merci d'avance,
    Loceka.

  2. #2
    Expert confirmé 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 : 48
    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
    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
    [fpu@lne ~/tmp] cat > d 
     
    motif1
    motif2
    motif3
    motif4
    [fpu@lne ~/tmp] sed "s/motif[^12]/motifprefix1/" d
     
    motif1
    motif2
    motifprefix1
    motifprefix1
    [fpu@lne ~/tmp]
    subtitue motif suivi de [ni 1 ni 2] par motifprefix1

  3. #3
    Membre Expert
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Par défaut
    D'accord, je me suis mal expliqué mais si c'était aussi simple je n'aurais pas utilisé le negative lookahead :

    Je veux exécuter la regex suivante s/prefix_(?!(toto|tata))[^"]+/prefix_toto/g avec sed.

    Appliquée à la chaîne '"prefix_toto"', elle ne fait rien.
    Appliquée à la chaîne '"prefix_tata"', elle ne fait rien.
    Appliquée à la chaîne '"prefix_titi"', elle la remplace par '"prefix_toto"'.

    Pour information, je ne compte pas l'utiliser sur "prefix_titi", ni sur "prefix_motif3", ce sont juste des noms abstraits pour exposer le problème.

  4. #4
    Expert confirmé 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 : 48
    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
    Par défaut
    Citation Envoyé par Loceka Voir le message
    D'accord, je me suis mal expliqué mais si c'était aussi simple je n'aurais pas utilisé le negative lookahead :

    Je veux exécuter la regex suivante s/prefix_(?!(toto|tata))[^"]+/prefix_toto/g avec sed.

    Appliquée à la chaîne '"prefix_toto"', elle ne fait rien.
    Appliquée à la chaîne '"prefix_tata"', elle ne fait rien.
    Appliquée à la chaîne '"prefix_titi"', elle la remplace par '"prefix_toto"'.

    Pour information, je ne compte pas l'utiliser sur "prefix_titi", ni sur "prefix_motif3", ce sont juste des noms abstraits pour exposer le problème.
    même principe le sauf tu mets "titi"
    et le patern de remplacement après

  5. #5
    Membre Expert
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Par défaut
    gné ?

    Tu veux dire écrire ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed "s/prefix_[^tototata]/prefix_toto/" my_file
    EDIT :
    Pour info c'est faisable avec Perl en ligne de commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -pe 's/prefix_(?!(motif1|motif2))[^"]+/prefix_motif1/g' fichier
    Ca a le même comportement que "sed -re 's/.../.../g' fichier" mais avec la vraie puissance de Perl.

Discussions similaires

  1. Besoin d'aide pour une expression régulière
    Par StringBuilder dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 06/12/2012, 12h12
  2. Besoin d'aide pour une expression régulière
    Par chlon dans le forum Requêtes
    Réponses: 4
    Dernier message: 16/07/2009, 16h41
  3. [RegEx] Besoin d'aide pour une expression régulière
    Par vallica dans le forum Langage
    Réponses: 4
    Dernier message: 04/09/2007, 19h59
  4. [RegEx] Aide pour une expression réguliére.
    Par mr_keyser dans le forum Langage
    Réponses: 9
    Dernier message: 15/06/2007, 10h27
  5. Besoin d'aide pour une expression régulière
    Par planetiss dans le forum Langage
    Réponses: 5
    Dernier message: 16/02/2006, 19h04

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