Script shell

simo -  
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   -
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.
Configuration: Windows XP
Internet Explorer 7.0

9 réponses

  1. dyllan Messages postés 5577 Statut Contributeur sécurité 918
     
    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
  2. Max
     
    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
  3. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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
  4. simo
     
    Merci bcp jipicy, t'est tjs le meilleur ;)
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. simo
     
    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
  7. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    sed 's#.*(\(.*\)|.*)#\1#;s#/# #g'
    ;-))
    0
    1. simo
       
      Merci bcp jipycy :)
      0
  8. simo
     
    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
    1. simo
       
      s
      0
  9. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Inspires-toi de cette excellente réponse de jisisv... ;-))
    0
    1. simo
       
      J'utilise le korn shell, et ça n'a pas l'air de marcher pour moi :(.
      0
  10. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    $ 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