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 :

sed remplacer chaînes de caractères sauf plusieurs chaînes identifiées


Sujet :

Shell et commandes GNU

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 44
    Points : 38
    Points
    38
    Par défaut sed remplacer chaînes de caractères sauf plusieurs chaînes identifiées
    Bonjour,

    plus je cherche et plus je m'embrouille, pourtant ça me paraissait simple au début.
    J'ai un fichier texte qui contient chiffres et lettres majuscules.
    Je veux supprimer toutes les lignes contenant des lettres majuscules, mais garder celles qui contiennent 3 mots (exemple : TOTO TATA TITI) ainsi que celles qui contiennent uniquement des chiffres
    Disons que mon fichiers ressemble à ça :
    TOTO
    TUTU
    KDK334
    PAAOAO001
    TATA
    456733
    TITI
    LDLDKK
    339388
    Au final je veux :
    TOTO
    TATA
    456733
    TITI
    339388

    Si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     sed -i '/\(TOTO\|TATA|TITI\)/!d' toto
    ça ne suffira pas car les lignes contenant des chiffres disparaissent...
    Merci pour votre aide,
    Y.

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 376
    Points
    19 376
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed '/[[:upper:]]/{/TOTO\|TITI\|TATA/! d}'
    ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 44
    Points : 38
    Points
    38
    Par défaut
    Merci beaucoup ça me paraît correct ; c'est la notion d'accolades qui m'avait échappé.

  4. #4
    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,
    Citation Envoyé par N_BaH Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed '/[[:upper:]]/{/TOTO\|TITI\|TATA/! d}'
    ?
    Le "[[:upper:]]" ne sert à rien

    Sans compter que pour répondre à la demande (mais garder celles qui contiennent 3 mots (exemple : TOTO TATA TITI) ainsi que celles qui contiennent uniquement des chiffres), sed '/TOTO\|TITI\|TATA\|^[[:digit:]]*$/! d' me semble plus approprié, non ?

    $ man woman
    Il n'y a pas de page de manuel pour woman.

  5. #5
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Le [[:upper:]] sert justement à exclure les lignes qui ne contiennent que des chiffres, pour pouvoir ensuite effacer toutes les lignes qui ne contiennent pas un des 3 mots.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  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 CosmoKnacki Voir le message
    Le [[:upper:]] sert justement à exclure les lignes qui ne contiennent que des chiffres, pour pouvoir ensuite effacer toutes les lignes qui ne contiennent pas un des 3 mots.
    Je cite :

    Citation Envoyé par yoyostras Voir le message
    Au final je veux :
    TOTO
    TATA
    456733
    TITI
    339388
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  7. #7
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Attention, quand je dis exclure les lignes qui ne contiennent que des chiffres, c'est sous-entendu de la commande d'effacement qui suit. "Filtrer" serait un mot plus juste.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  8. #8
    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
    Toutes mes confuses

    Je ne sais pas pourquoi, mais je m'étais imaginé qu'il y avait des minuscules dans le fichier de départ, d'où mon intervention concernant le "[[:upper:]] ne sert à rien"

    Effectivement la syntaxe de N_BaH fait parfaitement le job.

    Désolé pour le bruit.
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  9. #9
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Y a pas de mal, d'ailleurs la pattern que tu suggères serait très bien adaptée pour grep.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  10. #10
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 276
    Points : 12 717
    Points
    12 717
    Par défaut
    Bonjour,

    Je suis de l'avis de zipe31, car la solution de N_BaH est incomplète (elle ne fonctionne pas avec des caractères accentués en majuscule si on utilise la locale C par exemple) .

    Par contre, on n'a pas cette contrainte avec la reconnaissance du digit.
    Cordialement.

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

Discussions similaires

  1. [Batch] Remplacement d'une chaîne de caractères dans plusieurs fichiers txt
    Par antibab13 dans le forum Scripts/Batch
    Réponses: 7
    Dernier message: 03/09/2017, 16h52
  2. Réponses: 7
    Dernier message: 30/08/2017, 10h57
  3. Réponses: 2
    Dernier message: 01/08/2017, 10h09
  4. remplacement simultané de plusieurs chaînes de caractères
    Par boucledor13 dans le forum Informatica
    Réponses: 10
    Dernier message: 02/09/2011, 10h33
  5. Diviser une chaîne de caractères en plusieurs
    Par manshoon dans le forum Langage
    Réponses: 7
    Dernier message: 26/04/2006, 19h23

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