Ces exemples fonctionnent également dans bash sans avoir besoin d'utiliser sed :
#!/bin/bash
MYVAR=ho02123ware38384you443d34o3434ingtod38384day
MYVAR=${MYVAR//[a-zA-Z]/X}
echo ${MYVAR//[0-9]/N}
vous pouvez également utiliser les expressions entre crochets de la classe de caractères
#!/bin/bash
MYVAR=ho02123ware38384you443d34o3434ingtod38384day
MYVAR=${MYVAR//[[:alpha:]]/X}
echo ${MYVAR//[[:digit:]]/N}
sortie
XXNNNNNXXXXNNNNNXXXNNNXNNXNNNNXXXXXXNNNNNXXX
Ce que @Lanaru voulait savoir cependant, si je comprends bien la question, c'est pourquoi les extensions "full" ou PCRE \s\S\w\W\d\D
etc. ne fonctionnent pas comme prévu dans php ruby python etc. Ces extensions sont issues des expressions régulières compatibles avec Perl (PCRE) et peuvent ne pas être compatibles avec d'autres formes d'expressions régulières basées sur l'interpréteur de commandes.
Ceux-ci ne fonctionnent pas :
#!/bin/bash
hello=ho02123ware38384you443d34o3434ingtod38384day
echo ${hello//\d/}
#!/bin/bash
hello=ho02123ware38384you443d34o3434ingtod38384day
echo $hello | sed 's/\d//g'
sortie avec tous les caractères littéraux "d" supprimés
ho02123ware38384you44334o3434ingto38384ay
mais ce qui suit fonctionne comme prévu
#!/bin/bash
hello=ho02123ware38384you443d34o3434ingtod38384day
echo $hello | perl -pe 's/\d//g'
sortie
howareyoudoingtodday
J'espère que cela clarifie un peu plus les choses, mais si vous n'êtes pas encore confus, pourquoi ne pas essayer sur Mac OS X qui a l'indicateur REG_ENHANCED activé :
#!/bin/bash
MYVAR=ho02123ware38384you443d34o3434ingtod38384day;
echo $MYVAR | grep -o -E '\d'
Sur la plupart des versions de *nix, vous ne verrez que la sortie suivante :
d
d
d
nJoy !
0 votes
J'ai trouvé une question connexe ici : stackoverflow.com/questions/5658085/
3 votes
POUR INFORMATION,
\s
ne fait pas partie de la syntaxe standard des expressions régulières définies par POSIX (ni BRE ni ERE) ; il s'agit d'une extension de PCRE, qui n'est généralement pas disponible dans l'interpréteur de commandes.[[:space:]]
est l'équivalent le plus universel.2 votes
\s
peut être remplacé par[[:space:]]
En passant, je vous signale qu'il n'y a pas d'autre solution que de faire appel à l'aide,.
por?
et extglob, des extensions au langage de base du shell peuvent être utilisées pour des choses telles que des sous-groupes optionnels, des groupes répétés, etc.3 votes
Une description des motifs de Bash .
0 votes
Je l'utilise dans la version 4.1.11 de bash sur Solaris... echo ${hello//[0-9]} Remarquez l'absence de barre oblique finale.