#1 Le 26/11/2016, à 11:20
- DonutMan75
[RESOLU] [SED] Mettre en évidence les espaces
Bonjour,
promis, c'est la dernière fois aujourd'hui que je vous embête avec mes regexp ^^
je souhaiterais utiliser sed pour remplacer les espaces et tabulations consécutifs par un unique "_" dans une chaîne de caractères.
Par exemple : "aaa bb c d \t e \t\t f" serait remplacé par "aaa_bb_c_d_e_f"
Ma regexp pour matcher un nombre quelconque d'espaces et de tabulations (mais au moins une occurence) serait logiquement :
[ \t]+
Or je m'aperçois que sed ne connaît apparemment pas le méta-caractère "+"...
La regexp "sed-compatible" la plus proche que je vois serait
[ \t]*
mais ça a l'inconvénient de me mettre des "_" au début et à la fin de ma chaîne et (pire) d'ajouter des "_" entre chaque lettre :
$ echo -e 'aaa bb c\t\t d\te' | sed 's/[ \t]*/_/g'
_a_a_a_b_b_c_d_e_
Avez-vous des idées ?
Merci d'avance,
D.
Dernière modification par DonutMan75 (Le 26/11/2016, à 18:28)
Hors ligne
#2 Le 26/11/2016, à 11:27
- DonutMan75
Re : [RESOLU] [SED] Mettre en évidence les espaces
Une solution serait par exemple de remplacer "[ \t]+" par "[ \t][ \t]*" qui signifie je crois la même chose et qui est reconnu par sed.
Ainsi :
$ echo -e 'aaa bb c\t\t d\te' | sed 's/[ \t][ \t]*/_/g'
aaa_bb_c_d_e
donne bien le résultat attendu.
Y'a t'il plus propre, plus élégant ?
Merci d'avance
D.
Hors ligne
#3 Le 26/11/2016, à 11:30
- seebz
Re : [RESOLU] [SED] Mettre en évidence les espaces
Peut-être comme ça ?
$ echo -e 'aaa bb c\t\t d\te' | sed 's/[ \t]\+/_/g'
aaa_bb_c_d_e
https://www.gnu.org/software/sed/manual … sions.html
Dernière modification par seebz (Le 26/11/2016, à 11:31)
Hors ligne
#4 Le 26/11/2016, à 11:37
- DonutMan75
Re : [RESOLU] [SED] Mettre en évidence les espaces
Oook, ça marche exactement !
Donc, si je résume, dans sed il n'est pas nécessaire d'échapper "*" mais il FAUT échapper "+".
Je m'emmêle un peu les pinceaux.... c'est la différence entre les BRE (Basic RegExp) et ERE (Extended RegExp) ?
"*" est une BRE et "+" est une ERE ?
Merci d'avance pour cette réponse
D.
Hors ligne
#5 Le 26/11/2016, à 12:12
- pingouinux
Re : [RESOLU] [SED] Mettre en évidence les espaces
Hello,
Tu peux aussi faire ça :
echo -e 'aaa bb c\t\t d\te' | sed -r 's/[ \t]+/_/g'
Hors ligne
#6 Le 26/11/2016, à 12:22
- Hizoka
Re : [RESOLU] [SED] Mettre en évidence les espaces
Lu,
tu peux faire ça aussi :
echo -e 'aaa bb c\t\t d\te' | sed -r 's/[[:space:]]+/_/g'
Tu peux ajouter un [Resolu] dans ton titre de topic.
Dernière modification par Hizoka (Le 26/11/2016, à 12:23)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#7 Le 26/11/2016, à 17:47
- DonutMan75
Re : [RESOLU] [SED] Mettre en évidence les espaces
Bonjour à tous,
merci à vous deux, je viens de découvrir cette option de sed (c'est d'ailleurs l'équivalent de l'option -E de grep à ce qu'il me semble ?)
Bonne soirée et à bientôt !
D.
Hors ligne
#8 Le 26/11/2016, à 18:29
- Hizoka
Re : [RESOLU] [SED] Mettre en évidence les espaces
grep -E = egrep
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne