[KSH] - Completer une chaine de caractere

Résolu/Fermé
gorkimat Messages postés 70 Date d'inscription dimanche 1 avril 2007 Statut Membre Dernière intervention 1 mars 2012 - 3 mars 2008 à 15:42
 Athur - 6 nov. 2008 à 09:06
Bonjour à tous,

Je suis à la recherche d'une technique pour compléter avec un caractère (par exemple A), une chaîne de caractère si cette dernière a moins de 5 caractères.

Par exemple :

var1=12345
Résultat => 12345

var2=123
Résultat => 123AA

var3=1
Résultat => 1AAAA



La seule solution que j'ai trouver semble être une véritable usine à gaz ;-)

Je vous remercie par avance pour votre aide,

Bonne fin de journée,

Mat
A voir également:

3 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
3 mars 2008 à 15:54
Salut,

Avec "sed" peut être :
[rep]$ echo "1" | sed ':loop; s/^.\{1,4\}$/&A/;t loop'
1AAAA

[rep]$ echo "12" | sed ':loop; s/^.\{1,4\}$/&A/;t loop'
12AAA

[rep]$ echo "123" | sed ':loop; s/^.\{1,4\}$/&A/;t loop'
123AA

[rep]$ echo "1234" | sed ':loop; s/^.\{1,4\}$/&A/;t loop'
1234A

[rep]$ echo "12345" | sed ':loop; s/^.\{1,4\}$/&A/;t loop'
12345
;-))
0
gorkimat Messages postés 70 Date d'inscription dimanche 1 avril 2007 Statut Membre Dernière intervention 1 mars 2012 9
3 mars 2008 à 16:02
Salut jipicy,

Tout d'abord merci pour ta réponse.

C'est vrai que mes exemples était très mauvais. En fait les 1,2,3,4,5 peuvent être n'importe quel caractères.

J'ai repris ce que tu m'a conseiller, mais j'ai un message d'erreur sur loop "a priori".

bash-3.00$ ksh
$ echo "MERC" | sed ':loop; s/^.\{A,Z}$/&I/;t loop'
Label too long: :loop; s/^.\{A,Z}$/&I/;t loop


Aurais-tu une idée ?

Merci,

Mat
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 895
3 mars 2008 à 16:09
Pour ton histoire de label, il suffit de remplacer "loop" par la lettre que tu veux :
sed ':l; s/^.\{1,4\}$/&A/;t l'
Par contre ce que tu veux faire après ne rentre plus dans l'exemple que je t'ai donné. Dans mon exemple on finit de remplir la chaîne avec un caractère quelconque tant que la longueur de cette chaîne n'est pas égale à 5. Donc on se base sur un nombre précis...

Ton exemple avec les lettres ne peut pas marcher ;-((
0
gorkimat Messages postés 70 Date d'inscription dimanche 1 avril 2007 Statut Membre Dernière intervention 1 mars 2012 9
3 mars 2008 à 16:16
Salut,

D'accord, je n'avais pas capter que {1,4} signifiait "reperté 4 fois".

Mais comme cela ca ne pourrais pas marcher ?


echo "MERC" | sed ':l; s/^.\{1,4\}$/&I/;t l'


Et puis visiblement, le remplacement de 'loop' par 'l' n'a pas eut l'air de fonctionner ;-((

$ echo "MERC" | sed ':l; s/^.\{1,4\}$/&I/;t l'
Label too long: :l; s/^.\{1,4\}$/&I/;t l


Merci,

Mat
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 895
3 mars 2008 à 16:23
Essaie comme ça alors :
echo "MERC" | sed -e :z -e 's/^.\{1,4\}$/&I/;tz'
;-)
0
gorkimat Messages postés 70 Date d'inscription dimanche 1 avril 2007 Statut Membre Dernière intervention 1 mars 2012 9 > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
3 mars 2008 à 16:28
Jipicy,

Super, ça marche à merveille ...

Merci beaucoup pour ton aide, et désolé pour mon manque de clarté dans ma question.

Bonne journée,

Mat
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 895 > gorkimat Messages postés 70 Date d'inscription dimanche 1 avril 2007 Statut Membre Dernière intervention 1 mars 2012
3 mars 2008 à 16:29
De rien ;-))
0
Athur > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
5 nov. 2008 à 18:03
Bonjour,

J'ai un soucis équivalent, sauf que je dois compléter la chaine à gauche et non à droite.

echo "MERC" | sed -e :z -e 's/^.\{1,4\}$/&I/;tz'

en gros ce que je cherche à avoir ce n'est pas MERCI mais IMERC

d'avance merci pour vos réponse , je n'arrive pas à identifier le paramètre dans la commande que je dois changer ....


merci
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
3 mars 2008 à 16:12
hello
var=${var1}AAAAA
printf "%5s" $var
0
gorkimat Messages postés 70 Date d'inscription dimanche 1 avril 2007 Statut Membre Dernière intervention 1 mars 2012 9
3 mars 2008 à 16:29
Salut dubcek,

Merci pour ta proposition.

Bonne fin de journée,

Mat
0