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
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part /bin/echo $text | /usr/bin/awk -F\ -\ '{print $1}'
Partager