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 :

[sed] Enlever les caractéres . qui ne sont pas suivis de avi


Sujet :

Shell et commandes POSIX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    etudiant
    Inscrit en
    Août 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : etudiant

    Informations forums :
    Inscription : Août 2016
    Messages : 11
    Par défaut [sed] Enlever les caractéres . qui ne sont pas suivis de avi
    Bonjour tout le monde, ma question est dans le titre, je souhaite enlever avec sed les caractére . qui ne sont pas suivi de la chaine avi

    j'ai essayé ainsi avec une regex

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo bidule.truc.avi | sed -e 's/\.(?!avi)//g'
    mais cela ne marche pas, auriez vous d'autre solution ? merci ^^

  2. #2
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 295
    Par défaut
    Bonjour

    Je fatigue rien qu'à l'idée de lui expliquer l'exception des ".avi".
    Préférons une solution en 3 étapes pour faire les choses de façon systématique.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ echo "bid.ule.truc.avi tataavi tata.avi aefef.aefaef..aefaef.avi" | sed 's/\.avi/\n/g;s/\.//g;s/\n/.avi/g'
    biduletruc.avi tataavi tata.avi aefefaefaefaefaef.avi
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ echo "bid.ule.truc.avi tataavi tata.avi aefef.aefaef..aefaef.avi" | sed -e 's/\.avi/\n/g' -e 's/\.//g' -e 's/\n/.avi/g'
    biduletruc.avi tataavi tata.avi aefefaefaefaefaef.avi
    OK ?

  3. #3
    Membre averti
    Homme Profil pro
    etudiant
    Inscrit en
    Août 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : etudiant

    Informations forums :
    Inscription : Août 2016
    Messages : 11
    Par défaut
    Merci beaucoup
    Lo solution était plus simple que je ne le pensez X)

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

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

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    salut,

    pour la forme, une solution à coup de Perl, qui permet une syntaxe de regex plus expressive :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo "bid.ule.truc.avi tataavi tata.avi aefef.aefaef..aefaef.avi" | perl -ne 'print if s/\.(?!avi\b)//g'
    biduletruc.avi tataavi tata.avi aefefaefaefaefaef.avi
    note que le \b (word boundary) permettra d'éviter le cas limite où l'on a un .avi illégitime :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo "in.a.gadda.d.avida.avi" | perl -ne 'print if s/\.(?!avi\b)//g'
    inagaddadavida.avi

  5. #5
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 295
    Par défaut
    Citation Envoyé par BufferBob Voir le message
    note que le \b (word boundary)
    Ici, (et dans sed aussi), on peut utiliser indifféremment \b ou \> puisque on utilise :
    • \< pour le début de mot
    • \> pour la fin de mot
    • \b pour les extrémités (\< et \>)



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ echo "in.a.gadda.d.avida.avi"  | sed 's/\.avi\>/\n/g;s/\.//g;s/\n/.avi/g'                                                                   
    inagaddadavida.avi
    $ echo "in.a.gadda.d.avida.avi"  | sed 's/\.avi\b/\n/g;s/\.//g;s/\n/.avi/g'                                                                   
    inagaddadavida.avi

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

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

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Ici, (et dans sed aussi), on peut utiliser indifféremment \b ou \> puisque on utilise :
    • \< pour le début de mot
    • \> pour la fin de mot
    • \b pour les extrémités (\< et \>)
    ah ben je savais pas que sed supportait les boundaries tiens, j'ai appris un truc

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 103
    Par défaut
    Citation Envoyé par BufferBob Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo "in.a.gadda.d.avida.avi" | perl -ne 'print if s/\.(?!avi\b)//g'
    inagaddadavida.avi
    [HS]Ben dis donc! Ça nous rajeunit pas, ce papillon d'acier dans un jardin d'Eden...
    [/HS]

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

Discussions similaires

  1. Supprimer les cellules qui ne sont pas colorées
    Par Gwadadev dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 22/05/2008, 10h45
  2. [W3C] Recherche d'un logiciel pour détecter les balises qui ne sont pas fermées
    Par Etanne dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 19/11/2007, 16h55
  3. Réponses: 10
    Dernier message: 15/12/2006, 07h34
  4. Réponses: 3
    Dernier message: 26/07/2006, 20h41
  5. Réponses: 4
    Dernier message: 02/06/2006, 12h03

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