#1 Le 15/10/2008, à 22:34
- thurston
[RESOLU] Script: short_name: "prenom nom" => "P. Nom "
Bonjour,
Je cherche depuis une heure sur le web comment remplacer élégamment un prenom nom, en P. Nom
Par exemple, si le script s'appelait short_name
short_name "lee ranaldo"
renverrait L. Ranaldo
Je suis quasi sur qu'il faut utiliser sed, mais je peine un peu (quasi débutant en bash)
Des suggestions?
D'avance merci
Thurston
Dernière modification par thurston (Le 16/10/2008, à 07:54)
Hors ligne
#2 Le 15/10/2008, à 22:50
- morphoneo69
Re : [RESOLU] Script: short_name: "prenom nom" => "P. Nom "
Si ca peut t'apporter un début de reflexion :
# echo "eddy deli" | sed s/eddy/e/
e deli
Hors ligne
#3 Le 15/10/2008, à 23:09
- Didouuuuuuu
Re : [RESOLU] Script: short_name: "prenom nom" => "P. Nom "
C'est sur qu'avec sed, t'es pas rendu. Ne serait-ce que pour passer en upcase et tronquer le prénom.
Dans le même genre, as-tu pensé à ed ? C'est un éditeur ligne puissant.
Pour le faire en Bash, il faut aller regarder du côté des expansions de paramètre (Parameter Expansions). Tu le verras dans le man bash. Cela devrait trouver de quoi isoler le nom et le prénom.
Pour passer en capitale : tr '[:lower:]' '[:upper:]'
Tronquer ? Réponse : ${parameter:offset:length}
Sinon, si tu sais programmer en langage C ...
#4 Le 15/10/2008, à 23:13
- thurston
Re : [RESOLU] Script: short_name: "prenom nom" => "P. Nom "
@ morphoneo69
Oui, ca j'utilise. Mais le problème c'est que j'intègre betement cette fonction dans la boucle suivante:
J'extraie le 1er mot (prénom), j'extraie la première lettre, la mets en majuscule et en remplace le premier mot du nom complet par le résultat, mais j'ai l'impression que c'est un peu lourd...Pas de commande magique dans sed qui ferait l'affaire? ou ne faut il pas rediriger plusieurs fois (plusieurs | ) pour arriver au résultat de façon un eu plus élégante?
A+
Merci
Thurston
Dernière modification par thurston (Le 15/10/2008, à 23:14)
Hors ligne
#5 Le 15/10/2008, à 23:28
- Didouuuuuuu
Re : [RESOLU] Script: short_name: "prenom nom" => "P. Nom "
Tu as l'air de bien t'embêter.
Avec le chapître "Parameter expansion" du man de Bash, tu devrais trouver ce tu recherches.
Tiens un tuyau pour la route : pour supprimer les blancs en début et fin de chaîne de caractères (si besoin): VAR=`echo $VAR`
#6 Le 15/10/2008, à 23:31
- Didouuuuuuu
Re : [RESOLU] Script: short_name: "prenom nom" => "P. Nom "
Si ca peut t'apporter un début de reflexion :
# echo "eddy deli" | sed s/eddy/e/ e deli
C'est pour rire ?
#7 Le 16/10/2008, à 04:12
- frafa
Re : [RESOLU] Script: short_name: "prenom nom" => "P. Nom "
lo
pour les majuscules:
http://www.commentcamarche.net/faq/suje … -majuscule
VAR="lee ranaldo"
VAR2=$(echo -e "$VAR" | sed 's/^.\| [a-z]/\U&/g')
#le reste est à refaire en sed, moi je vais y passer 3 plombes, je passe la main :)
echo "$(echo $VAR2 | head -c1).$(echo $VAR2 |awk '{print $2}')"
#==> L.Ranaldo
Dernière modification par frafa (Le 16/10/2008, à 05:34)
Hors ligne
#8 Le 16/10/2008, à 06:12
- shogun
Re : [RESOLU] Script: short_name: "prenom nom" => "P. Nom "
salut
echo "lee ranaldo" | sed -r 's/^(.).* (.)/\U\1. \2/'
#9 Le 16/10/2008, à 06:20
- morphoneo69
Re : [RESOLU] Script: short_name: "prenom nom" => "P. Nom "
morphoneo69 a écrit :Si ca peut t'apporter un début de reflexion :
# echo "eddy deli" | sed s/eddy/e/ e deli
C'est pour rire ?
Non
Sans sed on peut essayer quelquechose du genre :
#!/bin/bash
echo $1
echo $2
i=${1:0:1}
t=$(echo $i | tr '[:lower:]' '[:upper:]')
echo $t. $2
Dernière modification par morphoneo69 (Le 16/10/2008, à 06:50)
Hors ligne
#10 Le 16/10/2008, à 07:54
- thurston
Re : [RESOLU] Script: short_name: "prenom nom" => "P. Nom "
@ shogun
Euh, ben c'est ce que je cherchais. Mais alors pour comprendre la fonction, bonjour. Adopté dans tous les cas!!!
Merci vraiment en tout cas à tous.
A+
Thurston
Hors ligne