2010-11-21 46 views
3

我有一個問題。 我的文本應該按照指定的寬度右對齊。我已成功地削減產量所需的大小,但我有問題,把一切在右側right text align - bash

這裏是我的了:

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

感謝

回答

16

嘗試:

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

這將使其與寬度40右對齊。如果您不想截斷,請刪除.40(謝謝Dennis!):

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

例如:

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

會打印:

abc 
abcde 
    abc 
abcdefghij 
+0

這給我一些奇怪的輸出,不知道爲什麼 – cubrilo 2010-11-21 17:22:08

+0

:)你認爲我能猜到輸出是什麼嗎?請在其他評論中發佈該問題。如果時間太長,請編輯您的問題並將其發佈到那裏。 – 2010-11-21 17:25:43

+0

@cubrilo:您可能需要一個'\ n'換行符,以便輸出與原始文件中隱含的意圖相匹配:'printf'%40.40s \ n「」$ line「'。注意'.40'會導致輸出被截斷,如果它更長,這可能是你想要的,但是如果不是,你可以省略那部分。 – 2010-11-21 21:53:40

1

你的最後一步可能是

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

當我把它放在while:f ='fold -w $ lenght $ file> output' while read line do sed -e:a -e's/^。\ {1,$ length \} $/&lt; echo「在sed後,行是$ line」 done <「test」 它給了我錯誤:sed:1:「s/^。\ {1,$ length \} $ /&/ ta: 「:RE錯誤:無效的重複次數 sed後,行是最後一行 – cubrilo 2010-11-21 17:23:18

+0

@cubrilo:將單引號改爲雙引號:'sed -e:a -e」s/^。\ {1, $ length \} $ /&/; ta「',但這種方式很慢,因爲它循環直到字符串足夠長。 – 2010-11-21 21:56:13