Имея длинную строку, которая должна отображаться с ограниченной шириной текста, есть ли в * nix инструмент командной строки, который преобразует однострочную строку в многострочную строку, каждая строка которой не длиннее заданной ширины текста?
Например, учитывая следующую строку
$ MYSTRING="Call me Ishmael. Some years ago - never mind how long precisely - having little or no money in my purse, and nothing particular to interest me on shore, I thought I would sail about a little and see the watery part of the world."
Я хотел бы отформатировать примерно так:
$ echo $MYSTRING | special-format-command --width=30
Call me Ishmael. Some years ag
o - never mind how long precis
ely - having little or no mone
y in my purse, and nothing par
ticular to interest me on shor
e, I thought I would sail abou
t a little and see the watery
part of the world.
text-processing
Кори Кляйн
источник
источник
echo $MYSTRING | fold -w 30
, так как-30
синтаксис не отображается на странице сгиба ?fmt
. Разница междуfold
иfmt
заключается в том,fold
что обтекание будет иметь фиксированную ширину, даже разделив слова, и может начинать строки с пробелов. Хотяfmt
обтекание будет иметь ширину около или ниже ширины, оно не будет разбивать слова, строки не будут начинаться с пробелов, и короткие строки могут быть объединены.fold
похоже, ведет себя аналогично тому,fmt
когда эта-s
опция используется.Вот метод, использующий
sed
:источник
.\{30\}
), той же строкой (&
), за которой следует символ новой строки.Вся цель
fmt
(часть GNU coreutils и других версий IIRC была включена в не-GNU * nixes, поэтому почти наверняка уже установлены) состоит в том, чтобы переформатировать абзацы.Тем не менее, есть еще лучший инструмент
par
(для переформатирования абзацев). Он может делать все, чтоfmt
может, но с гораздо большим количеством опций для контроля точного формата вывода.Одна из многих по-настоящему приятных вещей в
par
том, что она очень умна в обработке цитат в электронных письмах (даже в нескольких уровнях цитирования) - очень полезно ... У меня настроен .vimrc, так что нажатие F5 отправляет текущий абзац через пар.Если он не упакован для вашего дистрибутива (он предназначен для Debian и производных, возможно, для других), его можно найти по адресу http://www.nicemice.net/par/
источник
*nix
это просто способ сказать «универсальные Unix или Unix-подобные системы» - это относится ко времени, когда слово Unix было фирменным товарным знаком AT & Tfold -s
самый короткий, лучший ответ на ваш вопрос.Тем не менее, как бы ни были полезны эти одноцелевые инструменты, в общем, вы должны сделать так, чтобы ваш редактор сделал это.
В Emacs вы можете настроить это так, как захотите. Что касается меня, я использую
visual-line-mode
(отображается в качествеWrap
второстепенного режима в строке режима), потому что в общем случае я не хочу разрывов строк где-либо еще, чем в конце параграфов.Я думал, что скажу, как я это делаю. Это не «путь», но это один путь; поскольку я упоминаю функции и переменные, вы можете собрать их вместе и автоматизировать, чтобы они работали для вас. (Это Emacs, но для любого достаточно продвинутого редактора можно написать аналогичный пост.)
Я сказал, что при наборе текста строки оборачиваются визуально и никогда не ломаются вручную. Как всегда, есть исключения: например, GNUS не будет отправлять сообщения в Usenet со строками, превышающими определенную ширину (в символах). Итак, тогда я использую
M-q
. В EmacsM-q
запускает командуfill-paragraph
. Переменнаяfill-column
контролирует ширину для заполнения. Например, если я напишу это (в одну строку)а затем использовать Mq, я получаю
С помощью
justify-current-line
(в два раза больше двух строк) вы получитеНо я обнаружил, что люди редко используют моноширинные шрифты для просмотра вещей, поэтому не имело особого смысла использовать их (кроме моего собственного удовольствия от просмотра). Если вам это нравится, вы можете настроить ,
fill-paragraph
чтобы заполнить и оправдать в то же время. Вы также можете иметь Emacs сделать это для вас, всегда, как вы типа:auto-fill-mode
. (Я нашел это стрессом, но это я.)Это может показаться большой работой, и это так; но как только вы закончите (с этим и с 1000 другими вещами), вам действительно понравится работать с инструментами, которые ведут себя именно так, как вам нравится.
источник