Re: scripts le retour ....

Top Page

Reply to this message
Author: Olivier_Allard-Jacquin
Date:  
To: guilde
Subject: Re: scripts le retour ....

     Hello


Une solution en bash, avec sed:

sed '/^cn:/!d' t.txt | sed 's/cn: \(.*\) \([A-Z0-9_-]*\)$/telephone.sh "\1" "\2"/g' > mon_script_a_lancer.sh

où "data.txt" est ton fichier contenant l'exportation de LDAP. Pour executer le nouveau script, il te
faudra lancer "sh mon_script_a_lancer.sh"



Explications (Les expressions régulières c'est super, mais il vaut mieux les écrire que de les lire !!):

sed '/^cn:/!d' data.txt
=> lit le fichier "data.txt", et ne renvoit que les lignes commencant par "cn:".
=> C'est comme "grep"

sed 's/cn: \(.*\) \([A-Z0-9_-]*\)$/telephone.sh "\1" "\2"/g'
=> c'est une substitution/ remplacement. Les aspirines sont dans l'armoire à pharmacie ....
=> sed va:
- En partant de la fin ("$"), recherche tout les caractères "A"->"Z", "0"->"9", "-", "_", et les stocker
("\(....\)") dans le buffer "2"
- Rechercher tout les caractères qui se trouvent entre "cn " et le dernier espace (".*"), et et les stocker
("\(....\)") dans le buffer "1"
- afficher "telephone.sh", suivit du 1er buffer, puis du second. Remarque: j'ai mit des """ afin de prendre
en compte les prénoms composés de plusieurs mots ... Les gens qui ont des noms/prénoms composés
sont toujours à l'origine de cas particulier en informatique .... Ils sont pénibles !!! ;=)


Remarque:
Cette commande ne marche QUE si le NOM DE FAMILLE est en MAJUSCULES, et NE contient PAS
d'espace
Par contre, elle supportera sans problème des prénoms multiples ...

Exemple de fichier de test:
cn: Philippe BEAU
cn: Robert DUPONT
-
cn: Jean Philippe BEAU
cn: Jean-Robert DUPONT
-
cn: Philippe BEAU-2
cn: Robert DUPONT-2
-
cn: Jean Philippe BEAU-2
cn: Jean-Robert DUPONT-2


                              Olivier



> voila mon probleme ....
>
> j'ai un fichier toto.txt qui est en fait une extraction d'un annuaire

LDAP
> (mon premier) sous cette forme :
>
> cn: Philippe BEAU
> cn: Robert DUPONT
> .
> .
> .
> cn: Toto TATA
>
> je voudrais avoir un script qui me prennent chaque ligne me récupère le

nom
> & prénom dans 2 variables et qui le donne en paramètre a une deuxieme
> script..
>
> en gros, ca me ferait :
>
> telephone.sh "Philippe BEAU"
> telephone.sh "Robert DUPONT"
> etc..
>
> Quelqu'un aurait-il une idée pour moi ... ? (je sais, je suis null en

bash
> ...)
>
> Merci d'avance,
>
> Philippe B.