Hello,
saurais-tu m'éclairer sur la signification de la regexp utilisée ici "m*" :
Code:
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
Version imprimable
Hello,
saurais-tu m'éclairer sur la signification de la regexp utilisée ici "m*" :
Code:
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
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.
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:
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
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
Citation:
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:
Although this makes a certain amount of sense, it can be surprising.Code:
1
2 $ echo abc | awk { gsub(/m*/, "X"); print } XaXbXcX
Merci.
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.