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 :

[regxp] Filter des caracteres


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Avatar de SnakemaN
    Profil pro
    Bidouille-tout Android
    Inscrit en
    Juillet 2006
    Messages
    871
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Bidouille-tout Android

    Informations forums :
    Inscription : Juillet 2006
    Messages : 871
    Par défaut [regxp] Filter des caracteres
    Bonjour a tous me voila avec un petit problème d'expression régulière

    j'ai des chaines de caractères comportant des caractères spéciaux et je ne voudrais afficher/trier/laisser QUE les lettres (majuscule et minuscule) et les chiffres

    par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    [1H770EP
    LL #220V
    {OH BSZEYF
    devient

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    1H770EP
    LL220V
    OHBSZEYF
    Auriez vous une idée pour faire cela en shell/bash ?
    Le mieux serais de prendre un fichier en entrée et de ressortir en sortie ce fichier trié, mais je ne sais pas comment appliquer un tel filtre

    j'ai pensé à ça ce qui signifie pour moi tout caractère minuscule ou majuscule ou chiffre)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #!/bin/bash
    #
    # Trieur de chaines
    #USAGE : ./trieur.sh </chemin/du/fichier/> <fichierdesortie.txt>
     
    INFILE=$1
    OUTFILE=$2
    CURRENT_PATH=$(pwd)
     
    #lecture ligne par ligne
       #si ca correspond au masque [a-z]*|[A-Z]*[0-9]*
    cat $INFILE >> $CURRENT_PATH/$OUTFILE
    mais je sais pas trop comment traiter un fichier ligne par ligne et y appliquer un regexp ?

    Merci d'avance

  2. #2
    Membre émérite Avatar de BlaireauOne
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 492
    Par défaut
    Citation Envoyé par SnakemaN
    j'ai des chaines de caractères comportant des caractères spéciaux et je ne voudrais afficher/trier/laisser QUE les lettres (majuscule et minuscule) et les chiffres

    par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    [1H770EP
    LL #220V
    {OH BSZEYF
    devient

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    1H770EP
    LL220V
    OHBSZEYF
    Ça doit marcher

    http://www.shellunix.com/regexp.html

    sed "s/[^[:alnum:]]//g" $INFILE | sort > $CURRENT_PATH/$OUTFILE

  3. #3
    Membre émérite
    Avatar de SnakemaN
    Profil pro
    Bidouille-tout Android
    Inscrit en
    Juillet 2006
    Messages
    871
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Bidouille-tout Android

    Informations forums :
    Inscription : Juillet 2006
    Messages : 871
    Par défaut
    Parfait !

    Merci Beaucoup !

    Sans vouloir abuser c'est possible de me l'expliquer un peu ?

    (edit)
    Si j'ai bien compris ça consiste a faire que sed va change toutes les occurrences des chaines qui ne sont pas alphanumérique (^[:alnum:]) par...rien (//)
    Z'ai tout compris ou pô ?

    [edit]
    Et admettons que je veuille conserver que les Chiffres, Lettres, Underscore , Points-Virgule et Points ?

    le masque devient "s/[^[:alnum:]_;.]//g" ?

    Autoréponse : oui

    bon ben voila Merci BlaireauOne

  4. #4
    Membre émérite
    Avatar de SnakemaN
    Profil pro
    Bidouille-tout Android
    Inscrit en
    Juillet 2006
    Messages
    871
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Bidouille-tout Android

    Informations forums :
    Inscription : Juillet 2006
    Messages : 871
    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
    14
    15
    #!/bin/bash
    #
    # Trieur de chaines
    #USAGE : ./trieur.sh </chemin/du/fichier/entree> <fichierdesortie>
     
    INFILE=$1
    OUTFILE=$2
    CURRENT_PATH=$(pwd)
     
    #lecture ligne par ligne
    # recopie toutes les lignes et les caracteres qui sont des chiffres
    #et lettres en majuscule/minuscule, ou underscore ou point-virgule
    #ou encore point
     
    sed "s/[^[:alnum:]_;.]//g" $INFILE | sort > $CURRENT_PATH/$OUTFILE

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

Discussions similaires

  1. [Encodage] codage des caractères spéciaux
    Par soulhouf dans le forum Général Java
    Réponses: 11
    Dernier message: 24/08/2005, 12h07
  2. Analyseur XML : extraction des caracteres spéciaux
    Par abdou.sahraoui dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 19/07/2005, 15h07
  3. Réponses: 17
    Dernier message: 12/04/2005, 15h28
  4. [langage] compter des caracteres dans une chaine
    Par louisis dans le forum Langage
    Réponses: 3
    Dernier message: 18/05/2004, 22h39
  5. Réponses: 3
    Dernier message: 12/06/2002, 21h15

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