Script sh décomposer nom prénom
Bonjour j'essay de faire un petit script pour linux. Je récupére la liste de mes utilisateurs sur le domaine windows (getent passwd). Le retour de cette commande est comme ceci:
pseudo:x:10002:10000:nom prenom:/home/pseudo:/bin/bash
a partir de cette liste je voudrait récupérer le nom et le prénom et les assemblés pour créer une adresse mail.
voici le début de mon script:
#!/bin/sh
# Creation of the mail
MAILLING=/home/mailling.abook
USER=`getent passwd`
for i in $USER; do
wNAME=`echo $i | cut -d : -f 5`
if [ $wUID -gt 9999 ]; then
# Enter the mail
printf "prenom.nom@domain.com," >> $MAILLING
fi
done
Et donc dans le printf je voudrais qu'a partir de wNAME il y a prenom.nom
merci pour votre aide
pseudo:x:10002:10000:nom prenom:/home/pseudo:/bin/bash
a partir de cette liste je voudrait récupérer le nom et le prénom et les assemblés pour créer une adresse mail.
voici le début de mon script:
#!/bin/sh
# Creation of the mail
MAILLING=/home/mailling.abook
USER=`getent passwd`
for i in $USER; do
wNAME=`echo $i | cut -d : -f 5`
if [ $wUID -gt 9999 ]; then
# Enter the mail
printf "prenom.nom@domain.com," >> $MAILLING
fi
done
Et donc dans le printf je voudrais qu'a partir de wNAME il y a prenom.nom
merci pour votre aide
4 réponses
-
ContributeurSalut seboost,
Avec "sed", par exemple :
wNAME=`echo $i | cut -d : -f 5 | sed 's/ /\./g`
ou avec "tr" :
wNAME=`echo $i | cut -d : -f 5 | tr " " "."`
L'un ou l'autre remplace l'espace (s'il s'y trouve) par un point (et autant de fois qu'il y a un espace). Si tu veux remplacer un espace et un seul, utilise "sed" en retirant le "g" de la fin de commande.
Dal -
ModérateurSalut,
Tu peux aussi essayer ça :wNAME=`echo $i |cut -d : -f 5 | awk -F" " '{ print $2"."$1 }'`[Dal] => C'était juste parce qu'il voulait inverser l'ordre "prénom <=> nom".
Pssst =>> Il manque une "quote" (fermante) à l'expression avec "sed" ;-))
;-)) -
ModérateurSi tu veux continuer avec "sed", tu peux essayer ça :
echo $i | cut -d : -f 5 | sed 's/^\(....\)\(.*\)$/\2.\1/'
;-)) -
ModérateurPetite rectification, la solution précédente ne marchant pas à tous les coups (noms différents) :
echo $i | cut -d : -f 5 | sed 's/^\(.*[ ]\)\(.*\)/\2.\1/'
;-))