Problème regex avec bash
Résolu
CidHighwinds
-
dubcek Messages postés 18789 Date d'inscription Statut Contributeur Dernière intervention -
dubcek Messages postés 18789 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour !
Voilà, j'ai besoin de modifier une chaîne de caractères et j'ai l'impression d'utiliser beaucoup plus de commandes que nécessaire pour y arriver.
Je voudrais transformer les espaces en +, supprimer tout les caractères spéciaux SAUF les +, et finalement supprimer les + en doublons (ex ma++chaine+de+++caractères > ma+chaîne+de+caractères)
pour le moment je dois substituer les espaces par une chaine de caractères improbable
pour que la commande suivante ne supprime pas les + :
et ensuite je remets les espaces :
Puis je supprime les doublons :
Je voulais donc savoir s'il n'y avait pas un moyen plus propre clair net et précis de faire la même chose ?
en une seule commande sed -e ce serait le top !
Merci d'avance !
Voilà, j'ai besoin de modifier une chaîne de caractères et j'ai l'impression d'utiliser beaucoup plus de commandes que nécessaire pour y arriver.
Je voudrais transformer les espaces en +, supprimer tout les caractères spéciaux SAUF les +, et finalement supprimer les + en doublons (ex ma++chaine+de+++caractères > ma+chaîne+de+caractères)
pour le moment je dois substituer les espaces par une chaine de caractères improbable
ma_chaine=$(sed 's/ /0123456789/g' <<< "${ma_chaine}")
pour que la commande suivante ne supprime pas les + :
ma_chaine=$(sed 's/[^[:alnum:]]\+//g' <<< "${ma_chaine}")
et ensuite je remets les espaces :
ma_chaine=$(sed 's/0123456789/+/g' <<< "${ma_chaine}")
Puis je supprime les doublons :
ma_chaine=$(sed 's/+\{2,\}/+/g' <<< "${ma_chaine}")
Je voulais donc savoir s'il n'y avait pas un moyen plus propre clair net et précis de faire la même chose ?
en une seule commande sed -e ce serait le top !
Merci d'avance !
A voir également:
- Regex bash
- Bingo bash - Télécharger - Divers Jeux
- Bash addition ✓ - Forum Shell
- Bash list ✓ - Forum Shell
- Bash permission non accordée - Forum Shell
- Bash pause ✓ - Forum Shell
4 réponses
Salut,
On peut avoir un exemple de chaîne de caractères comprenant tous les caractères spéciaux dont tu parles et l'exemple de ce que tu veux en sortie ?
On peut avoir un exemple de chaîne de caractères comprenant tous les caractères spéciaux dont tu parles et l'exemple de ce que tu veux en sortie ?
Bien sur!
par exemple
En sortie
par exemple
ma_chaine="ma (chaine) [de ]carac_tères"
En sortie
ma_chaine="ma+chaine+de+caractères"
Magnifique !
Merci beaucoup, tu pourrais m'expliquer rapidement si ça ne te dérange pas ?
Ou me donner un lien explicatif ?
c'est surtout la première partie avant le pipe que je comprends pas.
Si tu ne peux pas c'est pas grave tu m'as beaucoup aidé.
merci !
Merci beaucoup, tu pourrais m'expliquer rapidement si ça ne te dérange pas ?
Ou me donner un lien explicatif ?
c'est surtout la première partie avant le pipe que je comprends pas.
Si tu ne peux pas c'est pas grave tu m'as beaucoup aidé.
merci !
man bash (remplacement de paramètres)
Sinon, si tu dois prendre en compte plusieurs espaces consécutifs (oublié dans ton exemple) :
$ ma_chaine="ma (chaine) [de ]carac_tères"
$ echo "${ma_chaine// /+}"
ma+(chaine)+[de+]carac_tères
Sinon, si tu dois prendre en compte plusieurs espaces consécutifs (oublié dans ton exemple) :
$ echo "${ma_chaine}"
ma (chaine) [de ]carac_tères
$ sed 's/ */+/g;s/[^[:alnum:]+]//g' <<<"${ma_chaine}"
ma+chaine+de+caractère