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 :

Comportement étrange : grep, REGEX et récursivité…


Sujet :

Shell et commandes GNU

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 63
    Points : 103
    Points
    103
    Par défaut Comportement étrange : grep, REGEX et récursivité…
    Bonjour à tous.
    J'ai un fichier dico.txt contenant 323577 mots (un par ligne).
    Je souhaite me débarrasser de tous les mots terminant par certains suffixes.
    Quand je compte les occurrences correspondant à chacun des suffixes, le résultat semble cohérent avec ce que je compte dans mon éditeur de texte.
    Par contre si j'essaye d'enlever les occurrences pour obtenir ma short-list, je n'arrive pas à trouver la syntaxe correcte: caractère de fin de ligne dans la variable (méthode 1) ou dans la boucle (méthode 2)?
    Faut-il que je sépare mes suffixes pour la REGEX inclusive #PATTERN# vs. exclusive #[^PATTERN] d'autant qu'avec le caractère de fin de ligne ça doit pas aider…
    Bref, là j'ai les yeux qui piquent sévèrement!

    Je suis novice en shell-scripting donc j'ai peut être fait des erreurs triviales…
    J'utilise zsh par habitude, une partie du problème pourrait venir de ses particularités?

    Voici le script:
    Code ZSH : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    SUFFIX=("SSENT\\s" "SSIEZ\\s" "ERONT\\s" "AIENT\\s" "ANTE\\s" "SSEZ\\s" "AUX\\s" "S\\s")
    SUFFIX2=("SSENT" "SSIEZ" "ERONT" "AIENT" "ANTE" "SSEZ" "AUX" "S")
    DICO=`cat dico.txt`
    TOTALDICO=`echo $DICO|wc -w`
    TOTALSUFFIX=0
     
    echo "Nombre initial de mot dans DICO :"$TOTALDICO
    echo "Nombre de mots pour chaque SUFFIX :"
     
    # On compte les occurences des PATTERN dans le DICO
    for ((i=1; i <= ${#SUFFIX}; i++))
    do
        COUNTSUFFIX=`echo $DICO|grep -cE "${SUFFIX[$i]}"`
        TOTALSUFFIX=`expr $TOTALSUFFIX + $COUNTSUFFIX`
        echo $i" "${SUFFIX[$i]}" : "${COUNTSUFFIX}
    done
     
    RESTEDICO=`expr $TOTALDICO - $TOTALSUFFIX`
     
    echo "\nTOTAL = "$TOTALSUFFIX"\n"
    echo "Le DICO après suppression devrait contenir "$RESTEDICO" mots ("$TOTALDICO"-"$TOTALSUFFIX")\n"
    echo "Suppression des SUFFIX dans le DICO méthode 1:"
     
    for ((i=1; i <= ${#SUFFIX}; i++))
    do
        COUNTSUFFIX=`echo $DICO|grep -cE "${SUFFIX[$i]}"`
        DICO=`echo $DICO|grep -E "[^${SUFFIX[$i]}]"`
        COUNTDICO=`echo $DICO|wc -w`
        echo $i" "${SUFFIX[$i]}" : "${COUNTSUFFIX}" reste dans DICO : "${COUNTDICO}
        #echo $DICO > .dico-${i}
    done
     
    echo "\nNombre final de mot dans DICO :"$COUNTDICO
    echo "\nSuppression des SUFFIX dans le DICO méthode 2:"
     
    for ((i=1; i <= ${#SUFFIX2}; i++))
    do
        COUNTSUFFIX=`echo $DICO|grep -cE "${SUFFIX2[$i]}\\s"`
        DICO=`echo $DICO|grep -E "[^${SUFFIX2[$i]}]\\s"`
        COUNTDICO=`echo $DICO|wc -w`
        echo $i" "${SUFFIX2[$i]}" : "${COUNTSUFFIX}" reste dans DICO : "${COUNTDICO}
    done

    Et voici le retour:
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    Nombre initial de mot dans DICO :323577
    Nombre de mots pour chaque SUFFIX :
    1 SSENT\s : 6790
    2 SSIEZ\s : 6877
    3 ERONT\s : 5947
    4 AIENT\s : 13202
    5 ANTE\s : 1159
    6 SSEZ\s : 546
    7 AUX\s : 870
    8 S\s : 131030
     
    TOTAL = 166421
     
    Le DICO après suppression devrait contenir 157156 mots (323577-166421)
     
    Suppression des SUFFIX dans le DICO méthode 1:
    1 SSENT\s : 6790 reste dans DICO : 323577
    2 SSIEZ\s : 6877 reste dans DICO : 323577
    3 ERONT\s : 5947 reste dans DICO : 323577
    4 AIENT\s : 13202 reste dans DICO : 323577
    5 ANTE\s : 1159 reste dans DICO : 323577
    6 SSEZ\s : 546 reste dans DICO : 323577
    7 AUX\s : 870 reste dans DICO : 323577
    8 S\s : 131030 reste dans DICO : 323577
     
    Nombre final de mot dans DICO :323577
     
    Suppression des SUFFIX dans le DICO méthode 2:
    1 SSENT : 6790 reste dans DICO : 74988
    2 SSIEZ : 6877 reste dans DICO : 28707
    3 ERONT : 0 reste dans DICO : 18737
    4 AIENT : 0 reste dans DICO : 5707
    5 ANTE : 0 reste dans DICO : 5707
    6 SSEZ : 0 reste dans DICO : 5707
    7 AUX : 870 reste dans DICO : 3347
    8 S : 0 reste dans DICO : 3347
    D'avance merci!

  2. #2
    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,

    c'est grep -v que tu cherches
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ grep -cP "($(sed 's/ /\|/g' <<< ${SUFFIX2[@]}))$" dico.txt
    166421
    $ grep -cvP "($(sed 's/ /\|/g' <<< ${SUFFIX2[@]}))$" dico.txt
    157156
    • -c : nombre d'occurrences (comptage)
    • -P : regex compatibles Perl (c'est le bien, c'est plus puissant que les regex par défaut ou les étendues, et ça va aussi plus vite)
    • le principe c'est grep "(SSENT|SSIEZ|ERONT)$", le dollar symbolisant la fin de la ligne
    • je me contente de construire dynamiquement la regex avec sed et mettre le tout dans une substitution de commande $(...)

  3. #3
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    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 101
    Points : 5 849
    Points
    5 849
    Par défaut
    J'ai pas tout à fait tout lu, mais il me semble que tu confonds 2 syntaxes de "grep":

    La commande grep -E '[^abc]' permet de filtrer toutes les lignes qui contiennent au moins une occurrence d'un caractère différent de "a", "b" et "c", c'est-à-dire qu'elle conserve uniquement toute ligne qui contient au moins un "d" ou un "e" ou un "f", etc. Ce n'est probablement pas ce que tu veux.

    La commande grep -v -E 'abc' permet de supprimer toute ligne contenant exactement une occurrence de la regexp (ici, la chaîne "abc"). C'est probablement ce que tu veux...

    [EDIT] grillé!

  4. #4
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    rgx=$(IFS='|'; echo "(${SUFFIX2[*]})\$" )
    egrep "$rgx" dico
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 63
    Points : 103
    Points
    103
    Par défaut
    Citation Envoyé par jack-ft Voir le message
    J'ai pas tout à fait tout lu, mais il me semble que tu confonds 2 syntaxes de "grep":
    La commande grep -E '[^abc]' permet de filtrer toutes les lignes qui contiennent au moins une occurrence d'un caractère différent de "a", "b" et "c", c'est-à-dire qu'elle conserve uniquement toute ligne qui contient au moins un "d" ou un "e" ou un "f", etc. Ce n'est probablement pas ce que tu veux.
    La commande grep -v -E 'abc' permet de supprimer toute ligne contenant exactement une occurrence de la regexp (ici, la chaîne "abc"). C'est probablement ce que tu veux...
    [EDIT] grillé!
    Mais oui, exactement!
    Maintenant ça me semble tout à fait logique: le motif n'a aucune raison d'être différant en fonction de l'usage que l'on en fait!
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Nombre initial de mot dans DICO :323577
    Nombre de mots pour chaque SUFFIX :
    1 SSENT\s : 6790
    2 SSIEZ\s : 6877
    3 ERONT\s : 5947
    4 AIENT\s : 13202
    5 ANTE\s : 1159
    6 SSEZ\s : 546
    7 AUX\s : 870
    8 S\s : 131030
     
    TOTAL = 166421
     
    Le DICO après suppression devrait contenir 157156 mots (323577-166421)
     
    Suppression des SUFFIX dans le DICO:
    1 SSENT\s : 6790 reste dans DICO : 316787
    2 SSIEZ\s : 6877 reste dans DICO : 309910
    3 ERONT\s : 5947 reste dans DICO : 303963
    4 AIENT\s : 13202 reste dans DICO : 290761
    5 ANTE\s : 1159 reste dans DICO : 289602
    6 SSEZ\s : 546 reste dans DICO : 289056
    7 AUX\s : 870 reste dans DICO : 288186
    8 S\s : 131030 reste dans DICO : 157156
     
    Nombre final de mot dans DICO :157156

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 63
    Points : 103
    Points
    103
    Par défaut
    Citation Envoyé par BufferBob Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ grep -cP "($(sed 's/ /\|/g' <<< ${SUFFIX2[@]}))$" dico.txt
    166421
    $ grep -cvP "($(sed 's/ /\|/g' <<< ${SUFFIX2[@]}))$" dico.txt
    157156
    Et du coup le passage par sed est nécessaire en mode REGEX-Perl?

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 63
    Points : 103
    Points
    103
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    rgx=$(IFS='|'; echo "(${SUFFIX2[*]})\$" )
    egrep "$rgx" dico
    Là je n'arrive pas à te suivre.

  8. #8
    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
    Citation Envoyé par Ottakar Voir le message
    Et du coup le passage par sed est nécessaire en mode REGEX-Perl?
    hmmm... non

    tu déclares comme ça dans ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ SUFFIX=("SSENT" "SSIEZ" "ERONT" "AIENT" "ANTE" "SSEZ" "AUX" "S")
    le sed il sert à transformer le tableau ${SUFFIX} en une chaine qui va nous servir ensuite de regex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ sed 's/ /\|/g' <<< ${SUFFIX[@]}
    SSENT|SSIEZ|ERONT|AIENT|ANTE|SSEZ|AUX|S
    on met le tout entre $(...), c'est pareil que `...` mais en mieux
    donc en fait on construit dynamiquement la regex, c'est une subtilité, c'est cadeau, pas du tout obligatoire

    à l'arrivée la commande c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep -P "(SSENT|SSIEZ|ERONT|AIENT|ANTE|SSEZ|AUX|S)$" dico.txt
    les regex Perl c'est pas de la sorcellerie, tu utilises grep -E (regex Extended) dans ton code, ben maintenant tu connais grep -P, c'est juste un moteur de regex différent, et sur un gros fichier comme ça -P ça va plus vite que -E tout simplement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ time grep -P "(SSENT|SSIEZ|ERONT|AIENT|ANTE|SSEZ|AUX|S)$" dico.txt
    real    0m0.490s
    $ time grep -E "(SSENT|SSIEZ|ERONT|AIENT|ANTE|SSEZ|AUX|S)$" dico.txt
    real    0m2.750s
    au cas où ce serait toujours pas clair à ce stade, le fait de construire une regex avec tous les suffixes permet de s'affranchir de la boucle for trèèès lente, donc ta shortlist ça pourrait être ça à l'arrivée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep -vP "(SSENT|SSIEZ|ERONT|AIENT|ANTE|SSEZ|AUX|S)$" dico.txt > shortlist.txt

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 63
    Points : 103
    Points
    103
    Par défaut
    OK, je comprend bien. le but du jeux était de compter les occurrences une à une, c'est pour ça que je suis partit sur une boucle.
    Je prend bonne note de l'option E, la différence est toujours bonne à prendre.
    Time ne donne pas le même retour chez moi, c'est la version ZSH ou un paramétrage perso?
    Il reste à éclaircir le cas de la fin de ligne, en exclusion le $ ne fonctionne pas à chaque fois… alors que \\s tous le temps.

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    ottakar@machine ~ % time grep -vcP "(SSENT|SSIEZ|ERONT|AIENT|ANTE|SSEZ|AUX|S)$" dico.txt
    323577
    grep -vcP "(SSENT|SSIEZ|ERONT|AIENT|ANTE|SSEZ|AUX|S)$" dico.txt  0,08s user 0,00s system 95% cpu 0,088 total
     
    ottakar@machine ~ % time grep -vcE "(SSENT|SSIEZ|ERONT|AIENT|ANTE|SSEZ|AUX|S)$" dico.txt
    323577
    grep -vcE "(SSENT|SSIEZ|ERONT|AIENT|ANTE|SSEZ|AUX|S)$" dico.txt  0,02s user 0,00s system 85% cpu 0,033 total
     
    ottakar@machine ~ % time grep -vcP "(SSENT|SSIEZ|ERONT|AIENT|ANTE|SSEZ|AUX|S)\\s" dico.txt             
    157156
    grep -vcP "(SSENT|SSIEZ|ERONT|AIENT|ANTE|SSEZ|AUX|S)\\s" dico.txt  0,08s user 0,00s system 96% cpu 0,091 total
     
    ottakar@machine ~ % time grep -vcE "(SSENT|SSIEZ|ERONT|AIENT|ANTE|SSEZ|AUX|S)\\s" dico.txt
    157156
    grep -vcE "(SSENT|SSIEZ|ERONT|AIENT|ANTE|SSEZ|AUX|S)\\s" dico.txt  0,76s user 0,00s system 98% cpu 0,776 total
     
     
    grep -E "(SSENT|SSIEZ|ERONT|AIENT|ANTE|SSEZ|AUX|S)\\s" dico.txt  2,11s user 0,92s system 32% cpu 9,372 total
     
    grep -P "(SSENT|SSIEZ|ERONT|AIENT|ANTE|SSEZ|AUX|S)\\s" dico.txt  0,41s user 0,63s system 11% cpu 9,399 total
     
    ottakar@machine ~ % time grep -cP "(SSENT|SSIEZ|ERONT|AIENT|ANTE|SSEZ|AUX|S)$" dico.txt
    0
    zsh: exit 1     grep -cP "(SSENT|SSIEZ|ERONT|AIENT|ANTE|SSEZ|AUX|S)$" dico.txt
    grep -cP "(SSENT|SSIEZ|ERONT|AIENT|ANTE|SSEZ|AUX|S)$" dico.txt  0,08s user 0,00s system 96% cpu 0,083 total

  10. #10
    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
    Citation Envoyé par Ottakar Voir le message
    le but du jeux était de compter les occurrences une à une, c'est pour ça que je suis partit sur une boucle.
    oui complètement, la commande donnée ne sert pas à compter les occurrences mais à créer la shortlist ou compter le nombre total des occurrences en une seule passe, ça n'est pas censé remplacer ton script ou faire la totalité de l'exercice

    Je prend bonne note de l'option E, la différence est toujours bonne à prendre.
    yep, l'option -P aussi

    Time ne donne pas le même retour chez moi, c'est la version ZSH ou un paramétrage perso?
    j'utilise pas zsh. mais ça importe peu en fait, c'était surtout pour te montrer que -P était plus rapide que -E, ce qui en fait est évident sous mon Windows/Cygwin et ne l'est pas forcément sous ton Linux, soit.

    Il reste à éclaircir le cas de la fin de ligne, en exclusion le $ ne fonctionne pas à chaque fois… alors que \\s tous le temps.
    alors ça pour moi c'est le point le plus obscur justement, $ c'est standard pour la quasi-totalité des moteurs de regex quelque soit le langage, c'est la fin de ligne.
    \\s ça correspond à rien, en tous cas pour grep, ou plutôt si, c'est censé correspondre à la chaine "\s", on échappe l'antislash en en mettant deux "\\" et suivi d'un "s"

    avec un antislash en moins \s ça pourrait symboliser un caractère d'espacement (donc espace ou tabulation typiquement), mais du coup ça voudrait dire qu'on a pas le même dictionnaire et qu'à la fin de chaque mot dans le tiens y'a un espace

    bref c'est assez mystérieux vu d'ici, mais peu importe, t'as résolu ton problème c'est l'essentiel.

  11. #11
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    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 101
    Points : 5 849
    Points
    5 849
    Par défaut
    [HS=orthographe]
    Citation Envoyé par BufferBob Voir le message
    quelque soit le langage
    Attention: "quel que soit" s'écrit TOUJOURS en 3 mots.

    Pour s'en souvenir, on peut se référer au sens littéral de l'expression: "quel que soit le langage" veut dire "que le langage soit (n'importe le)quel".

    Du coup, on voit aussi que ça s'accorde au féminin: "quelle que soit la langue" veut dire "que la langue soit (n'importe la)quelle".

    ou au pluriel: "quelles que soient les langues" veut dire "que les langues soient (n'importe les)quelles".

    ÀBES!
    [/HS]

  12. #12
    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
    Citation Envoyé par jack-ft Voir le message
    Attention: "quel que soit" s'écrit TOUJOURS en 3 mots.
    nianiania
    je la fais tout le temps en plus celle là, t'as raison.

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 242
    Points : 13 457
    Points
    13 457
    Par défaut
    Citation Envoyé par jack-ft Voir le message
    [HS=orthographe]Attention: "quel que soit" s'écrit TOUJOURS en 3 mots.[/HS]
    Ou un seul: ∀

    ∀ langage



    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 63
    Points : 103
    Points
    103
    Par défaut
    Citation Envoyé par BufferBob Voir le message
    yep, l'option -P aussi
    Ah oui, faute de frappe

    Citation Envoyé par BufferBob Voir le message
    alors ça pour moi c'est le point le plus obscur justement, $ c'est standard pour la quasi-totalité des moteurs de regex quelque soit le langage, c'est la fin de ligne.
    \\s ça correspond à rien, en tous cas pour grep, ou plutôt si, c'est censé correspondre à la chaine "\s", on échappe l'antislash en en mettant deux "\\" et suivi d'un "s"
    avec un antislash en moins \s ça pourrait symboliser un caractère d'espacement (donc espace ou tabulation typiquement), mais du coup ça voudrait dire qu'on a pas le même dictionnaire et qu'à la fin de chaque mot dans le tiens y'a un espace
    Le 2ème antislash ne sert à rien, c'est un antislash d'échappement que j'ai gardé au long du chemin.
    L'ai rechargé le dico, pour vérifier, c'est pareil…

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

Discussions similaires

  1. Comportement étrange $ regex
    Par Furior dans le forum Langage
    Réponses: 2
    Dernier message: 07/05/2012, 12h20
  2. Fonction grep - comportement étrange
    Par pleiade dans le forum Shell et commandes GNU
    Réponses: 9
    Dernier message: 19/11/2008, 19h07
  3. comportement étrange d'une jointure ...
    Par amenis dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 10/02/2005, 21h27
  4. [Système][Runtime][Exec] Comportement étrange au lancement de BeSweet
    Par divxdede dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 06/06/2004, 09h54
  5. Réponses: 2
    Dernier message: 22/09/2003, 11h23

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