Script sh décomposer nom prénom

Fermé
seboost - 4 mai 2005 à 16:01
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 4 mai 2005 à 23:15
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

4 réponses

[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 096
4 mai 2005 à 17:57
Salut 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
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 897
4 mai 2005 à 20:04
Salut,

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" ;-))
;-))
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 897
4 mai 2005 à 23:01
Si tu veux continuer avec "sed", tu peux essayer ça :
echo $i | cut -d : -f 5 | sed 's/^\(....\)\(.*\)$/\2.\1/'
;-))
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 897
4 mai 2005 à 23:15
Petite 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/'
;-))
0