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 :

[gawk] gsub(/m*/, "X") ?!


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2008
    Messages : 10
    Par défaut [gawk] gsub(/m*/, "X") ?!
    Hello,

    saurais-tu m'éclairer sur la signification de la regexp utilisée ici "m*" :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $  echo  abc  |  awk{  gsub(/m*/,  "X");  print  }’
      XaXbXcX


    je pourrais aussi bien mettre n*,o*... j'obtiens le même résultat !?

    merci d'avance

  2. #2
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Bonjour,

    Ca cherche une chaine composee de 0 ou plusieurs occurences de la lettre m. Oui, c'est assez inutile comme ca, mais je ne pense pas que ce soit le code definitif : le "echo abc" devant est assez revelateur d'un test.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

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

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

    Je suis Gangsoleil et je relance de 10$ en disant que le signe qui permet de désigner "1 ou plus" est le '+'.

    On peut donc désigner le nombre de répétitions comme ceci:
    • m* : 0 ou +
    • m+ : 1 ou +
    • m? : 0 ou 1
    • [^m] : 0
    • m : 1


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $ echo "hmmmm, j'aime mon hmmmm."
    hmmmm, j'aime mon hmmmm.
    $ echo "hmmmm, j'aime mon hmmmm."|sed '/m*/s//X/g'
    XhX,X XjX'XaXiXeX XoXnX XhX.X
    $ echo "hmmmm, j'aime mon hmmmm."|sed '/m\+/s//X/g'
    hX, j'aiXe Xon hX.
    $ echo "hmmmm, j'aime mon hmmmm."|sed '/m/s//X/g'
    hXXXX, j'aiXe Xon hXXXX.
    $ echo "hmmmm, j'aime mon hmmmm."|sed '/m/s//X/'
    hXmmm, j'aime mon hmmmm.
    $ echo "hmmmm, j'aime mon hmmmm."|sed '/m\?/s//X/g'
    XhXXXX,X XjX'XaXiXeX XoXnX XhXXXX.X
    $ echo "hmmmm, j'aime mon hmmmm."|sed '/[^m]/s//X/g'
    XmmmmXXXXXXmXXmXXXXmmmmX

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2008
    Messages : 10
    Par défaut
    J'ai bien compris ce qu'était sensé faire "m*", ce qui me surprend c'est le résultat obtenu... d'ailleurs la doc. fait état de cette surprise.

    cet exemple est tiré de la doc. "GAWK: Effective AWK Programming
    A User’s Guide for GNU Awk Edition 4.1 May, 2013" :
    https://www.gnu.org/s/gawk/manual/gawk.pdf

    p 171 (encadré juste au-dessus du chapitre 9.1.4 Input/Output Functions) :

    Matching the Null String
    In awk, the ‘*’ operator can match the null string. This is particularly important for the
    sub(), gsub(), and gensub() functions. For example:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $  echo  abc  |  awk{  gsub(/m*/,  "X");  print  }’
       XaXbXcX
    Although this makes a certain amount of sense, it can be surprising.

    Merci.

  5. #5
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    tu cherches a remplacer m* soit comme tu l'as compris 0 a N lettres m consecutives.
    Donc tu vas remplacer par X :
    • toutes les chaines composees de plusieurs m consecutifs
    • tous les caracteres m isoles
    • toutes les absences de caractere m


    L'exemple de Flodelarab lignes 3 et 4 donne une tres bonne vision de ce qui va etre remplace.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

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