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

4 réponses

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    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
    1. Modérateur
      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" ;-))
      ;-))
      1. Modérateur
        Si tu veux continuer avec "sed", tu peux essayer ça :
        echo $i | cut -d : -f 5 | sed 's/^\(....\)\(.*\)$/\2.\1/'
        ;-))
        1. Modérateur
          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/'
          ;-))