2010-11-21 11 views
3

Ich habe ein Problem. Mein Text sollte nach rechts in der angegebenen Breite ausgerichtet sein. Ich habe es geschafft Ausgang auf die gewünschte Größe zu schneiden, aber ich habe Probleme mitright text align - bash

Hier ist alles auf der rechten Seite setzen ist, was ich habe:

#!/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" 

dank

Antwort

16

Versuchen:

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

Dies wird es rechts ausgerichtet mit Breite 40 machen. Wenn Sie keine Trunkierung wollen, fallen .40 (danke Dennis!):

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

Zum Beispiel:

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

drucken:

abc 
abcde 
    abc 
abcdefghij 
+0

diese geben Sie mir einige merkwürdige Ausgabe sein könnte, weiß nicht, warum – cubrilo

+0

:) Glaubst du, ich kann raten, was die Ausgabe war? Bitte poste das Problem in einem anderen Kommentar. Wenn es zu lang ist, redigiere deine Frage und poste sie dort. –

+0

@cubrilo: Möglicherweise möchten Sie eine \ n \ -Neuzeile, damit die Ausgabe der im Original angegebenen Absicht entspricht: 'printf% 40.40s \ n" "$ line" '. Beachten Sie, dass '.40' dazu führt, dass die Ausgabe abgeschnitten wird, wenn sie länger ist, was Sie vielleicht möchten, aber wenn nicht, können Sie diesen Teil weglassen. –

1

Ihr letzter Schritt

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

wenn ich dies während while: f = 'falten -w $ length $ datei> output' während lesen line tun sed -e: a -e 's/^. \ {1, $ length \} $/& /; ta ' echo "nach sed, zeile ist $ zeile" erledigt <"test" es gibt mir fehler: sed: 1: "s/^. \ {1, $ length \} $/& /; ta ": RE Fehler: ungültige Anzahl der Wiederholungen nach sed, Zeile ist LETZTE LINIE – cubrilo

+0

@cubrilo: Ändern Sie die einfachen Anführungszeichen in doppelte Anführungszeichen:' sed -e: a -e "s/^. \ {1, $ length \} $/& /; ta "', aber dieser Weg ist langsam, da er eine Schleife ausführt, bis die Zeichenfolge lang genug ist. –