2010-11-21 3 views
3

У меня есть одна проблема. Мой текст должен быть выровнен по правой ширине. Мне удалось сократить производство до нужного размера, но у меня есть проблема с помещением все на правой сторонеправый выравнивание текста - 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

Try:

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

Это сделает его выровненным по правому краю с шириной 40. Если вы не хотите усечения, оставьте .40 (спасибо Деннис!):

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

+0

:) Как вы думаете, я могу догадаться, что такое выход? Пожалуйста, опубликуйте проблему в другом комментарии. Если он слишком длинный, отредактируйте свой вопрос и опубликуйте его там. –

+0

@cubrilo: Вам может понадобиться строка '\ n', поэтому результат соответствует намерению, указанному в оригинале:' printf '% 40.40s \ n "" $ line "'. Обратите внимание, что '.40' приведет к усечению вывода, если он длиннее, что может быть тем, что вы хотите, но если вы не можете опустить эту часть. –

1

Ваш последний шаг может быть

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

, когда я вставляю это, пока: f = 'fold -w $ lenght $ file> output' при чтении строки do sed -e: a -e '/ \. \ {1, $ length \} $/& amp; ta ' echo "после sed, строка $ line" done <"test" Это дает мне ошибку: sed: 1: "s/^. \ {1, $ length \} $/& /; ta ": RE error: недопустимое число повторений после sed, строка LAST LINE – cubrilo

+0

@cubrilo: сменить одинарные кавычки на двойные кавычки:' sed -e: a -e 's/^. \ {1, $ length \} $/& /; ta "', но этот путь медленный, так как он петли, пока строка не будет достаточно длинной. –

Смежные вопросы