2010-11-21 19 views
3

J'ai un problème. Mon texte doit être aligné à droite dans la largeur spécifiée. Je suis parvenu à réduire sa production à la taille désirée, mais j'ai un problème de tout mettre sur le côté droitright text align - bash

Voici ce que je suis:

#!/usr/local/bin/bash 

length=$1 
file=$2 
echo $1 

echo -e "length = $length \t file = $file " 
f=`fold -w$length $file > output` 
while read line 
do 
     echo "line is $line" 
done < "output" 

grâce

Répondre

16

Essayez:

printf "%40.40s\n" "$line" 

Cela le rendra aligné à droite avec la largeur 40. Si vous ne voulez pas de troncature, déposez .40 (merci Dennis!):

printf "%40s\n" "$line" 

Par exemple:

printf "%5.5s\n" abc 
printf "%5.5s\n" abcdefghij 
printf "%5s\n" abc 
printf "%5s\n" abcdefghij 

imprimera:

abc 
abcde 
    abc 
abcdefghij 
+0

cela me donne une sortie étrange, ne sais pas pourquoi – cubrilo

+0

:) Pensez-vous que je peux deviner quelle était la sortie? S'il vous plaît poster le problème dans un autre commentaire. Si c'est trop long, éditez votre question et postez-la là. –

+0

@cubrilo: Vous pourriez avoir besoin d'une nouvelle ligne '\ n' pour que la sortie corresponde à l'intention implicite dans l'original:' printf "% 40.40s \ n" "$ line" '. Notez que le '.40' entraînera la coupure de la sortie si elle est plus longue, ce qui peut être ce que vous voulez, mais sinon vous pouvez omettre cette partie. –

1

Votre dernière étape pourrait être

sed -e :a -e 's/^.\{1,$length\}$/ &/;ta' 
+0

quand je mets ceci: f = 'fold -w $ longueur $ file> sortie' tout en lisant ligne do sed -e: a -e/s.^1, $ longueur \} $/& /; ta ' echo "après sed, ligne est $ ligne" done <"test" il me donne l'erreur: sed: 1: "s/^. \ {1, $ longueur \} $/& /; ta: ": erreur RE: nombre de répétitions non valide après sed, ligne est LAST LINE – cubrilo

+0

@cubrilo: Remplace les guillemets simples par des guillemets:' sed -e: a -e "s/^. \ {1, $ length \} $/& /; ta "', mais cette méthode est lente car elle boucle jusqu'à ce que la chaîne soit suffisamment longue. –