[KSH] - Completer une chaine de caractere

Résolu
gorkimat Messages postés 70 Date d'inscription   Statut Membre Dernière intervention   -  
 Athur -
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   Statut Modérateur Dernière intervention   4 896
 
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   Statut Membre Dernière intervention   9
 
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   Statut Modérateur Dernière intervention   4 896
 
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   Statut Membre Dernière intervention   9
 
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   Statut Modérateur Dernière intervention   4 896
 
Essaie comme ça alors :
echo "MERC" | sed -e :z -e 's/^.\{1,4\}$/&I/;tz'
;-)
0
gorkimat Messages postés 70 Date d'inscription   Statut Membre Dernière intervention   9 > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
 
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   Statut Modérateur Dernière intervention   4 896 > gorkimat Messages postés 70 Date d'inscription   Statut Membre Dernière intervention  
 
De rien ;-))
0
Athur > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
 
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 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
hello
var=${var1}AAAAA
printf "%5s" $var
0
gorkimat Messages postés 70 Date d'inscription   Statut Membre Dernière intervention   9
 
Salut dubcek,

Merci pour ta proposition.

Bonne fin de journée,

Mat
0