2010-11-21 29 views
3

Bir sorunum var. Metnim, belirtilen genişlikte sağa hizalanmalıdır. Ben istenen boyuta çıkışını kesmek başarmış, ama sağ tarafta İştesağ metin align - bash

her şeyi koyarak ile sorun var ben ne var:

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

sayesinde

cevap

16

Dene:

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

Bu, genişliği 40 ile doğru hizalanmış hale getirecektir. Kesinti istemiyorsanız, .40 bırakın (teşekkürler Dennis!):

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

Örneğin:

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

yazdırır:

abc 
abcde 
    abc 
abcdefghij 
+0

bu bana biraz garip çıkışı vermek olabilir, neden – cubrilo

+0

bilmiyorum :) Çıkışın ne olduğunu tahmin edebileceğimi mi düşünüyorsun? Lütfen sorunu başka bir yorumda paylaşın. Çok uzunsa, sorunuzu düzenleyin ve orada yayınlayın. –

+0

@cubrilo: "\ n" bir satırsonu isteyebilirsiniz, böylece çıktı, orijinalde belirtilen niyetle eşleşir: "printf"% 40.40s \ n "" $ line ". '.40', çıktının ne kadar uzunsa, çıktının kesilmesine neden olacağını unutmayın, ancak değilse, bu bölümü çıkartabilirsiniz. –

1

Nihai adım

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

bunu koyarken: f = 'katlama -w $ uzunluk $ dosya> çıktı ' satır okunurken do sed -e: a -e' s/^. \ {1, $ length \} $/& /; ta ' echo "sedden sonra, satır $ satırı" yapıldı <"test" bana hata veriyor: sed: 1: "s/^. \ {1, $ length \} $/& /; ta ": RE hatası: geçersiz tekrar sayısı , sed, satır LAST LINE – cubrilo

+0

@cubrilo: Tek tırnakları çift tırnak işareti olarak değiştirin:" sed -e: a -e "s/^. \ {1, $ length \} $/& /; ta "', ancak bu, dizgenin yeterince uzun olmasına kadar döngüden beri yavaştır. –