#1 Le 06/12/2011, à 14:37
- Lohot
Couper une chaine de caractère
Bonjour,
Je voudrais couper la chaine de caractère suivante au symbole | :
chaine="bonjour au revoir|demain hier|lundi mardi mercredi"
Pour ceci, j'ai tenté plusieurs scripts
for i in `echo $chaine | tr "|" " "`; do echo $i; done
IFS=’|’
for line in $repertoire do; echo "$line"; done
Chacun des scripts pose un problème au niveau des espaces et me revoie
bonjour
au
revoir
demain
hier
lundi
mardi
mercredi
Quelqu'un aurait-il une solution ?
Merci d'avance.
Ordinateur : MSI GP60-2QE 1007XFR
Distribution : Ubuntu 18.04
Hors ligne
#2 Le 06/12/2011, à 15:58
- AnsuzPeorth
Re : Couper une chaine de caractère
Bjr,
~$ echo -e "${chaine//|/\n}"
bonjour au revoir
demain hier
lundi mardi mercredi
Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script (Hors ligne)
Hors ligne
#3 Le 06/12/2011, à 17:21
- Sciensous
Re : Couper une chaine de caractère
chaine="bonjour au revoir|demain hier|lundi mardi mercredi"; echo "$chaine" | while read i; do echo "$i" | tr "|" "\n"; done
antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )
Hors ligne
#4 Le 06/12/2011, à 18:52
- AnsuzPeorth
Re : Couper une chaine de caractère
chaine="bonjour au revoir|demain hier|lundi mardi mercredi"; echo "$chaine" | while read i; do echo "$i" | tr "|" "\n"; done
euhh, pourquoi une boucle sur une variable qui ne contient qu'une ligne ?
Si tu veux vraiment traiter dans une boucle:
en sh:
echo $chaine | tr '|' '\n' | while read line; do echo $line; done
en bash:
while read line; do echo $line; done< <(echo -e "${chaine//|/\n}")
Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script (Hors ligne)
Hors ligne
#5 Le 06/12/2011, à 19:09
- Sciensous
Re : Couper une chaine de caractère
euhh, pourquoi une boucle sur une variable qui ne contient qu'une ligne ?
car je ne suis pas un pro du shell, juste un amateur légèrement éclairé
Si tu veux vraiment traiter dans une boucle:
en sh:echo $chaine | tr '|' '\n' | while read line; do echo $line; done
merci pour la leçon, c'est vrai que c'est un poil plus optimisé
perso je reste sur le shell sh et évite la bash...
antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )
Hors ligne
#6 Le 07/12/2011, à 11:20
- pingouinux
Re : Couper une chaine de caractère
Bonjour,
Autre solution :
echo -n "$chaine" | awk 'BEGIN{RS="|"}{print}'
Dernière modification par pingouinux (Le 07/12/2011, à 19:50)
Hors ligne