Bonjour,
Je voudrais découper un chaine de caractère mais avec une chaine de caractère qui est " - ", j'ai essayé avec plusieurs cut successifs mais c'est pas terrible est pas très fiable, est ce que quelqu'un aurait une idée ?
Merci
Version imprimable
Bonjour,
Je voudrais découper un chaine de caractère mais avec une chaine de caractère qui est " - ", j'ai essayé avec plusieurs cut successifs mais c'est pas terrible est pas très fiable, est ce que quelqu'un aurait une idée ?
Merci
un petit exemple de la chaine d'origine et du resultat voulue serait le bienvenue, car la, c'est pas trop clair ...
expliquer ce que tu as deja essayé permettrai aussi de pouvoir t'aiguiller .
Merci pour ta réponse.
Voilà un exemple simple :
Si je fais echo $result j'obtiens "chaine" alors que je voudrais "chaine 1"...Code:
1
2 text="chaine 1 - chaine 2" result=`echo $text|cut -d" - " -f1`
C'est plus clair ?
le probleme doit etre ailleurs :
cela fonctionnne tres bien ........sauf que si su fait :Code:
1
2
3
4
5 bash-3.1$ text="chaine 1 - chaine 2" bash-3.1$ result=`echo $text|cut -d"-" -f1` bash-3.1$ echo $result chaine 1
9 caractere au lieux des 8 que tu attends ....Code:
1
2
3
4
5
6 echo "|"$result"|" |chaine 1 | ou echo ${#result} 9
tu constate que il y a un espace apres le 1 .....
donc un espace que tu attend pas
donc par exemple :
la les resultats sont bien ceux attendu .Code:
1
2
3
4
5
6
7
8
9
10 text="chaine 1 - chaine 2" result=$(echo $text|cut -d"-" -f1) result=${result:0:(( val = ${#result} - 1 ))} if [[ $result = "chaine 1" ]] then echo ok else echo NOK fi
remarque que tu as , dans ton exemple, mi un espace avant et apres le - dans la commande cut, ce que cut refuse par une erreur (un seul caractere delimiteur avec cut)
merci pour les réponses.
Voici une solution qui marche super :
Code:
1
2 text="chaine-1 - chaine-2" result=`echo $text |sed -e "s/\(.*\) - .*/\1/"`
Il y a aussi une possibilité avec awk :
awk prend \ -\ comme séparateur de champ et renvoie le champ voulu ($1 pour le premier champ).Code:/bin/echo $text | /usr/bin/awk -F\ -\ '{print $1}'