Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/09/2006, 22h39   #1
Futur Membre du Club
 
Inscription : janvier 2005
Messages : 64
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2005
Messages : 64
Points : 16
Points : 16
Par défaut Découper une chaine de caractère

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
Franckinux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2006, 10h22   #2
Rédacteur
 
Inscription : mars 2004
Messages : 1 298
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 1 298
Points : 1 450
Points : 1 450
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 .
__________________
Marc
Slackware for ever ......
BASH - KSH ( http://marcg.developpez.com/ksh/ )
MarcG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2006, 13h50   #3
Futur Membre du Club
 
Inscription : janvier 2005
Messages : 64
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2005
Messages : 64
Points : 16
Points : 16
merci pour ta réponse.

Voilà un exemple simple :

Citation:
text="chaine 1 - chaine 2"
result=`echo $text|cut -d" - " -f1`
si je fais echo $result j'obtiens "chaine" alors que je voudrais "chaine 1"...

c'est plus clair ?
Franckinux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2006, 12h05   #4
Rédacteur
 
Inscription : mars 2004
Messages : 1 298
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 1 298
Points : 1 450
Points : 1 450
le probleme doit etre ailleurs :
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
cela fonctionnne tres bien ........sauf que si su fait :
Code :
1
2
3
4
5
6
 
echo "|"$result"|"
|chaine 1 |
ou 
echo ${#result}
9
9 caractere au lieux des 8 que tu attends ....
tu constate que il y a un espace apres le 1 .....
donc un espace que tu attend pas
donc par exemple :
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
la les resultats sont bien ceux attendu .




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)
__________________
Marc
Slackware for ever ......
BASH - KSH ( http://marcg.developpez.com/ksh/ )
MarcG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2006, 20h03   #5
Futur Membre du Club
 
Inscription : janvier 2005
Messages : 64
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2005
Messages : 64
Points : 16
Points : 16
merci pour les réponses.

Voici une solution qui marche super :

Citation:
text="chaine-1 - chaine-2"
result=`echo $text |sed -e "s/\(.*\) - .*/\1/"`
Franckinux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2006, 12h32   #6
Candidat au titre de Membre du Club
 
Inscription : octobre 2006
Messages : 14
Détails du profil
Informations personnelles :
Âge : 44

Informations forums :
Inscription : octobre 2006
Messages : 14
Points : 10
Points : 10
Il y a aussi une possibilité avec awk :
/bin/echo $text | /usr/bin/awk -F\ -\ '{print $1}'

awk prend \ -\ comme séparateur de champ et renvoie le champ voulu ($1 pour le premier champ).
mikool19 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h24.


 
 
 
 
Partenaires

Hébergement Web