Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 26/11/2016, à 12: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, à 19:28)

Hors ligne

#2 Le 26/11/2016, à 12: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 smile

D.

Hors ligne

#3 Le 26/11/2016, à 12: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, à 12:31)

Hors ligne

#4 Le 26/11/2016, à 12: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 smile

D.

Hors ligne

#5 Le 26/11/2016, à 13: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, à 13:22

Hizoka

Re : [RESOLU] [SED] Mettre en évidence les espaces

Lu,

tu peux faire ça aussi smile :

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, à 13:23)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#7 Le 26/11/2016, à 18: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, à 19:29

Hizoka

Re : [RESOLU] [SED] Mettre en évidence les espaces

grep -E = egrep smile


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne