Script shell

Fermé
simo - 19 mai 2008 à 13:45
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 26 mai 2008 à 13:44
Bonjour,
j'ai un fichier qui contient les lignes ci-aprés :

nom1(famille1/X/famille2/Y/famille3/A|)
nom2(famille1/X/famille2/Y/famille3/B|)
nom1(famille1/X/famille5/Y/famille3/C|)
nom2(famille1/X/famille5/Y/famille3/D|)

J'ai besoin de récupérer tout ce qui entre parenthèses sous forme de paramètres en utilisant le shell unix.
Ex :
(famille1/X/famille2/Y/famille3/A|)
param1 : famille1
param2 : X
param3 : famille2
param4 : Y
param5 : famille2
param6 : A

Merci d'avance pour votre aide.
A voir également:

9 réponses

dyllan Messages postés 4694 Date d'inscription mardi 9 janvier 2007 Statut Contributeur sécurité Dernière intervention 25 juin 2019 909
19 mai 2008 à 13:51
Bonjour,
essaye d'utiliser la commande "cut" :

cut - famille1 - X > tempo --> ici tu récupère les champ famille1 et X dans le dossier tempo

mais ce n'est pas complet tu veux maintenant les afficher. Essaye avec read sur des valeurs que tu définies, tu les rappelles.
0
je serais toi je mettrais le contenu du fichier dans une variable chaine de caractère et après je découperé la chaine de caractère:
par exemple un fichier texte qui contient 7 paramètre: (1/2/3/4/5/6/7)

#mettre la chaine de caractères dans une variable
variable=$(cat fichier.txt)

param1=${variable%/*} #6 fois pour récupérer que le param1 (boucle for)

param2=${variable%/*} #5 fois pour récupérer que le param1 et le 2
param2=${variable#*/} #1 fois pour avoir que le 2


param3=${variable%/*} #4 fois pour récupérer que le param1 et le 2
param3=${variable#*/} #2 fois pour avoir que le 2
.
.
.
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 896
19 mai 2008 à 16:23
Salut,

Une piste :
[trash] $ echo $var
nom1(famille1/X/famille2/Y/famille3/A|)

[trash] $ echo $var | sed 's#.*(\(.*\)|)#\1#;s#/# #g'
famille1 X famille2 Y famille3 A

[trash] $ set $(echo $var | sed 's#.*(\(.*\)|)#\1#;s#/# #g')

[trash] $ echo "                                       
Param1 = $1
Param2 = $2
Param3 = $3
Param4 = $4
Param5 = $5
Param6 = $6"

Param1 = famille1
Param2 = X
Param3 = famille2
Param4 = Y
Param5 = famille3
Param6 = A

[trash] $ 
;-))
0
Merci bcp jipicy, t'est tjs le meilleur ;)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bonjour,
En fait, j'ai un petit problème avec le sed :(. Les expressions ci-dessous peuvent contenir du texte aprés le "|"

nom1(famille1/X/famille2/Y/famille3/A|dfd)
nom2(famille1/X/famille2/Y/famille3/B|fffff)
nom1(famille1/X/famille5/Y/famille3/C|)
nom2(famille1/X/famille5/Y/famille3/D|)

Le résultat devient :

Param1 = nom1(famille1
Param2 = X
Param3 = famille2
Param4 = Y
Param5 = famille3
Param6 = A|dfd

Merci pr votre aide :)
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 896
20 mai 2008 à 11:18
sed 's#.*(\(.*\)|.*)#\1#;s#/# #g'
;-))
0
Merci bcp jipycy :)
0
Bonjour jipycy,

E fait, j'ai le script suivant élaboré avec ton aide :
-------------------------------------------------------------------------------------------------------
while true
do
clear
for ligne in `cat $fichier2`; do
set $(echo $ligne | sed 's#.*(\(.*\)|.*)#\1#;s#/# #g')
echo ""
echo " "$i". famille1: "$2 "| famille2: "$4 "| famille3: "$6
i=`expr $i + 1`
done


echo "

Votre choix : \c choix"
read choix

case "$choix" in
"0" )
exit;;

"variable" ) echo "choix 1"
;;

"variable" ) echo "choix 2"
;;
etc...

esac

done
-----------------------------------------------------------------------------------------------

sachant que le fichier2 contient :

nom1(famille1/X/famille2/Y/famille3/A|dfd)
nom2(famille1/X/famille2/Y/famille3/B|fffff)
nom1(famille1/X/famille5/Y/famille3/C|)
nom2(famille1/X/famille5/Y/famille3/D|)
etc...

Je voudrai que le script affiche l'ensemble des familles contenues dans le fichier dynamiquement avec un numéroà savoir le $i et que l'uilisateur ait la possiblité de faire son choix (variable) parmi ceux affiché dynamiquement.

Merci d'avance.
0
s
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 896
26 mai 2008 à 10:49
Inspires-toi de cette excellente réponse de jisisv... ;-))
0
J'utilise le korn shell, et ça n'a pas l'air de marcher pour moi :(.
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 896
26 mai 2008 à 13:44
$ set -A mon_tableau élément1 élément2 élément3
$ echo ${mon_tableau[1]}
élément2
$ echo ${mon_tableau[0]}
élément1
$ echo ${mon_tableau[*]}
élément1 élément2 élément3
$ echo ${#mon_tableau[*]}
3
$
;-))
0