Форматирование текста в bash-скрипте

Здравствуйте. Мне нужно обработать текст (txt) для чтения на плеере - перекодировать в UCS-2/CRLF/21 (Little-endian UTF-16 Unicode text, with CRLF, CR, LF line terminators по мнению утилиты file - любой другой формат файла не сработает, плеер жутко привередливый в этом плане) и отформатировать под ширину экрана (70 символов), иначе плеер будет переносить текст как попало.

Можно конечно прогнать его через fold -sw 70, но после него он выглядит несколько неряшливо. Хотелось бы сделать расстановку переносов по правилам Русского языка (как в oowriter, но желательно без него - чистый shell script имхо будет гораздо быстрее чем вызов oowriter для каждого файла), выделение красной строки и форматирование по ширине (с помощью пробелов).

Возможно ли такое вообще без вызова oowriter, и если невозможно то как автоматизировать обработку большого числа файлов в различных кодировках через oowriter (желательно без промежуточных перекодировок)?

Я сделал небольшой скрипт для обработки:

#!/bin/bash
cd /media/Arago\'s\ PMP/Text || exit 1
cd Original
for file in *.txt ; do
 for cols in 60 65 70 75 80 ; do
  [[ ! -d ../$cols ]] && mkdir ../$cols
  if [[ ! -f "../$cols/$file" ]]; then
   echo "$file" \($cols columns\)
   enconv -x cp1251 < "$file" | fold -sw $cols | iconv -f cp1251 -t unicode > "../$cols/${file}"
  else
   echo "$file" \($cols columns\) already recoded, skipping
  fi
 done
done
echo All done!

И хотелось бы прикрутить к нему недостающую функциональность (выделение красной строки, расстановку переносов, форматирование по ширине). Как это сделать?

python

В данном случае я считаю целесообразно использовать python.

Разработкой на python'е я

Разработкой на python'е я практически не занимался ещё. Какими его командами можно сделать это? Можно ли будет просто вставить скрипт с нужной функциональностью вместо fold -sw? перекодирование в cp-1251 там нужно для обхода бага в fold, его пофиксят в sys-apps/coreutils-8.5r1 - лучше будет использовать перекодирование в utf8.

string.decode, string.encode

string.decode, string.encode - для перекодирования.
Что касается переносов строк и прочего, то можно написать небольшой скрипт (не думаю, что больше 100 строк), здесь я уверен, что получится проще чем на bash. P.S. возможно будет полезным посмотреть на примеры обработки и форматирования текста на python, http://code.activestate.com/recipes/302380-formatting-plain-text-into-columns

Ещё одна ссылка

http://www.doughellmann.com/PyMOTW/textwrap/
Судя по описанию и примерам, это именно то что вам нужно для правильного переноса текста.

переносы + по ширине

http://quittance.ru/hyphenator.php
http://quittance.ru/monojust.php
http://quittance.ru/files/phpjustifier-0.0.1.tar.gz
Лицен­зия - LGPL v.3 так что поддержку красных строк добавьте сами

а эта строка - это просто подпись

Спасибо!

Это именно то что нужно. Поддержка красной строки уже имеется, опробовал онлайн - всё прекрасно отработало. С php я немного знаком, думаю прикрутить его к bash'у будет нетрудно.

Вот только забыл я что на плеере стоит шрифт Nina - а он пропорциональный, соответственно строки всё равно разбредаются. Пробовал поставить DejaVuSansMono - с ним текст отображается корректно, но смотрится он с таким шрифтом достаточно странно, буквы какието квадратные практически, расстояние между символами и строками большое, пробелы так вообще гигантские...
Кто нибудь может посоветовать моноширный ttf шрифт для чтения (желательно unicode), или рассказать как можно изменить существующий (сжать по ширине и уменьшить межстрочный интервал)? Плеер позволяет только выбрать файл шрифта и его размер.

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".